python-Tkinter:AttributeError:NoneType对象没有属性

发布于 2021-02-02 23:24:48

我创建了这个简单的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?

关注者
0
被浏览
273
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    grid,pack并且place在功能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语句,这将带来额外的副作用,使你的布局更易于理解和维护。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看