[英]Get an AttributeError in Python Tkinter. How to fix it?
这只是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()
结果是这样的:
因此,我在“条目”中输入一个字符串,然后单击“提交”按钮。 该程序将打印出字符串。
但是,我得到了:
AttributeError: 'Window' object has no attribute 'text'
我不知道为什么它不起作用。 请帮我!
您只是在text
声明中忘记了self
:
self.text = Entry(self, bd=1)
self.text.pack(side = TOP)
因此, text
是局部变量,并且在__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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.