即使我觀看了有關 Python 中的面向物件編程和類的視頻,我也無法弄清楚這一點。
簡化場景:2 個班級。class1 基本上是一個帶有兩個按鈕的視窗(button1 創建一個第二類物件,而 button2 通過 entrybox.get() 從這個新創建的物件 Entry 小部件內部獲取值)
class2 是一個帶有 tkinter Entry 小部件的框架。
import tkinter as tk
class WindowClass:
def create_frame(self):
new_window = FrameClass(self.master)
def get_value(self):
"""WHAT CODE DO I PUT HERE TO GET THE VALUE ENTERED BY USER INTO THE ENTRYBOX?"""
pass
def __init__(self):
super().__init__()
root = tk.Tk()
self.master = root
self.master.geometry('500x500')
self.create_frame_button = tk.Button(self.master,
text='Create Frame with Entry',
width=20,
command=self.create_frame)
self.get_value_button = tk.Button(self.master,
text='Get value from frame',
width=20,
command=self.get_value)
self.create_frame_button.place(x=10, y=10)
self.get_value_button.place(x=10, y=40)
root.mainloop()
class FrameClass:
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master, height=250, width=480, relief='solid', bd=4)
self.entrybox = tk.Entry(self.frame, width=15, font='Calibri, 12')
self.entrybox.place(x=10, y=10)
self.frame.place(x=10, y=100)
if __name__ == '__main__':
WindowClass()
請幫忙,謝謝大家
uj5u.com熱心網友回復:
解決方案
這也是我曾經為之奮斗的一個話題。但幸運的是,我找到了一種方法來做到這一點。首先,使FrameClass繼承的WindowClass. 接下來,在 的__init__函式中FrameClass,初始化WindowClass. 現在,當您想要訪問useFrameClass中的屬性時。這是有效的,因為當您在 中初始化 時,將其物件(在下面的代碼中為“obj”)傳遞給(指的是呼叫該方法的物件)。接下來,如果要訪問 中的屬性,可以使用或。使事情變得更快,但只能用于方法和WindowClassselfWindowClassFrameClassFrameClassWindowClassselfWindowClassFrameClassselfsupersuperself在 MRO(第一個子類,然后是父類)中搜索,也可以用于屬性。這是您的代碼,可以使事情更容易理解:
代碼
import tkinter as tk
class WindowClass:
def get_value(self):
value = self.entrybox.get()
print(value)
"DO WHATEVER YOU WANT TO DO WITH THE VALUE HERE"
def __init__(self):
root = tk.Tk()
self.master = root
self.master.geometry('500x500')
self.create_frame_button = tk.Button(self.master,
text='Create Frame with Entry',
width=20,
command=lambda: self.create_frame(self.master))
self.get_value_button = tk.Button(self.master,
text='Get value from frame',
width=20,
command=self.get_value)
self.create_frame_button.place(x=10, y=10)
self.get_value_button.place(x=10, y=40)
root.mainloop()
class FrameClass(WindowClass):
def __init__(self):
super().__init__()
def create_frame(self, master):
self.__master = master
self.frame = tk.Frame(self.__master, height=250, width=480, relief='solid', bd=4)
self.entrybox = tk.Entry(self.frame, width=15, font='Calibri, 12')
self.entrybox.place(x=10, y=10)
self.frame.place(x=10, y=100)
if __name__ == '__main__':
obj = FrameClass()
注意:通常建議在另一個函式中創建 GUI,而不是在__init__. 我已洗掉該create_frame函式并將其替換為lambda函式。我還使用了名稱修飾來避免self.master兩個類之間的混淆。我希望這可以幫助您解決問題并增加您對 OO Tkinter 的了解!另外,如果您對答案中給出的資訊有任何不明白的地方,您可以發表評論和詢問。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520775.html
