我创建了这个简单的 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, packplace 的职能 Entry 对象和所有其他小部件的返回 None. 。在 python 中,当你这样做时 a().b(), ,表达式的结果是任意的 b() 返回,因此 Entry(...).grid(...) 将返回 None.

您应该将其分成两行,如下所示:

entryBox = Entry(root, width=60)
entryBox.grid(row=2, column=1, sticky=W)

这样你就可以得到你的 Entry 参考存储在 entryBox 它的布局如您所料。这有一个额外的副作用,如果您收集了所有的布局,那么您的布局将更容易理解和维护。 grid 和/或 pack 块中的语句。

其他提示

更改这一行:

entryBox=Entry(root,width=60).grid(row=2, column=1,sticky=W)

分为这两行:

entryBox=Entry(root,width=60)
entryBox.grid(row=2, column=1,sticky=W)

正如您已经正确执行的那样 grabBtn!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top