Python Tkinter:AttributeError:NoneType对象没有属性

Python Tkinter:AttributeError:NoneType对象没有属性,python,user-interface,tkinter,Python,User Interface,Tkinter,我创建了这个简单的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('&l

我创建了这个简单的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()
为什么entryBox设置为None?

条目对象和所有其他小部件的网格、打包和放置函数都返回None。在python中,当您执行a.b时,表达式的结果是b返回的结果,因此Entry…grid。。。将不返回任何值

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

entryBox = Entry(root, width=60)
entryBox.grid(row=2, column=1, sticky=W)
这样,您就可以将条目引用存储在entryBox中,并按照您的预期进行布局。这有一个额外的副作用,即如果您在块中收集所有网格和/或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所做的一样

对于entryBox.get访问get方法,您需要Entry对象,但Entryroot,width=60。gridrow=2,column=1,sticky=W返回None

entryBox=Entryroot,宽度=60创建一个新的条目对象

此外,您不需要 entryBox=entryBox.gridrow=2,column=1,sticky=W,因为它将用None重写entryBox

只需替换entryBox=entryBox.gridrow=2,column=1,sticky=W 与


谢谢你,亚历克斯。我应该想到的是:-这不是一个被接受的答案的复制品,但11年后?
entryBox=Entry(root,width=60)
entryBox.grid(row=2, column=1,sticky=W)
entryBox = Entry(root, width=60)
entryBox.grid(row=2, column=1, sticky=W)