这只是Python Tkinter的一个简单实践。 这是代码:
from tkinter import *
class Window(Frame):
def __init__(self, master = None):
Frame.__init__(self, master)
self.master = master
self.init_window()
def init_window(self):
self.master.title('GUI')
self.pack(fill=BOTH, expand=1)
text = Entry(self, bd=1)
text.pack(side = TOP)
submit_b = Button(self, text = 'submit', command = self.submit)
submit_b.pack(side = BOTTOM)
def submit(self):
print(self.text.get())
root = Tk()
root.geometry('200x50')
app = Window(root)
root.mainloop()
结果如下:
所以我在'条目'中输入一个字符串。然后点击“提交”#39;按钮。该程序将打印出字符串。
然而,我得到了这个:
AttributeError: 'Window' object has no attribute 'text'
我不知道它为什么不起作用。请帮帮我!
答案 0 :(得分:4)
您忘记了text
声明中的self
:
self.text = Entry(self, bd=1)
self.text.pack(side = TOP)
因此text
是一个局部变量,并且很快就被遗忘了#34}。在__init__
完成之后。这样,它就是实例的成员变量,可以从submit
内访问。请注意,除了例如,使用Java的this
,如果找不到同名的局部变量,Python不会自动查找实例变量。 self
不可选或仅用于消除歧义。
或者,您可以将text
保留为本地变量,但也可以将submit
设为本地变量:
text = Entry(self, bd=1)
text.pack(side = TOP)
def submit():
print(text.get())
submit_b = Button(self, text = 'submit', command = submit)
submit_b.pack(side = BOTTOM)
对于submit_b
,您不需要self
,因为您没有在__init__
方法之外引用该按钮。事实上,在致电pack
之后,您根本没有提到按钮,所以您甚至可以这样做:
Button(self, text = 'submit', command = submit).pack(side = BOTTOM)