繁体   English   中英

在Python Tkinter中获取AttributeError。 如何解决?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM