我创建了这个简单的GUI:
from tkinter import * root = Tk() def grabText(event): print(entryBox.get()) entryBox = Entry(root, width=60).grid(row=2, column=1, sticky=W) grabBtn = Button(root, text="Grab") grabBtn.grid(row=8, column=1) grabBtn.bind('<Button-1>', grabText) root.mainloop()
我启动并运行了UI。当我单击Grab按钮时,在控制台上出现以下错误:
C:\Python> python.exe myFiles\testBed.py Exception in Tkinter callback Traceback (most recent call last): File "C:\Python\lib\lib-tk\Tkinter.py", line 1403, in __call__ return self.func(*args) File "myFiles\testBed.py", line 10, in grabText if entryBox.get().strip()=="": AttributeError: 'NoneType' object has no attribute 'get'
为什么entryBox设置为None?
grid,pack并且place在功能Entry对象和所有其他部件的回报None。在python中,执行此操作时a().b(),表达式的结果为b()返回的值,因此Entry(...).grid(...)将返回None。
grid,pack
a()
b()
Entry(...).grid(...)将返回None
你应该将其分成两行,如下所示:
entryBox = Entry(root, width=60) entryBox.grid(row=2, column=1, sticky=W)
这样,你就可以将Entry参考存储在其中,entryBox并且可以按照你的期望进行布局。如果你以块的形式收集所有grid和/或pack语句,这将带来额外的副作用,使你的布局更易于理解和维护。
Entry
entryBox
grid
/
pack