我正在使用python 3.3中的tkinter模块我对此比较陌生并正在使用输入框。出于某种原因,当我运行以下代码时,我收到一条错误消息,指出AttributeError:'NoneType'对象没有属性'get'。有人可以向我解释原因吗?我做了一个类似的程序,只有一个条目,工作得很好。
from tkinter import *
master =Tk()
class quad(object):
def __init__(self, ae, be, ce):
self.ae = ae
self.be = be
self.ce = ce
def calculate(self):
a = self.ae.get()
b = self.be.get()
c = self.ce.get()
A = float(a)
B = float(b)
C = float(c)
D = (-B)/(2*A)
E = ((B**2 -4*A*C)**(.5))/(2*A)
first = D + E
second = D - E
print(first, "\n", second)
Label(master, text='A=').grid(row=0, column=0)
Label(master, text='B=').grid(row=1, column=0)
Label(master, text='C=').grid(row=2, column=0)
ae = Entry(master).grid(row=0, column=1)
be = Entry(master).grid(row=1, column=1)
ce = Entry(master).grid(row=2, column=1)
model =quad(ae, be, ce)
Button(master, text='submit', width=10, command=model.calculate).grid(row=3, column=1, sticky=W)
mainloop()
答案 0 :(得分:5)
仔细查看错误消息:它说什么?它正好告诉你问题是什么。它甚至会告诉你行号。
AttributeError:'NoneType'对象没有属性'get'
请注意'NoneType'
所在的位置?这意味着某些变量是None
,即使您认为它是其他变量。显然,None
没有名为get
的方法。所以,你必须问自己,为什么它是None
?
您没有在问题中显示,但错误很可能发生在ae
变量(以及be
和ce
变量)上。所以问题是,为什么他们None
?
他们None
的原因是你设置它们是这样的:
ae = Entry(master).grid(row = 0,column = 1)
在python中,当你x=a().b()
时,x得到b()
的值。因此,您将ae
设置为grid(...)
语句的值,并且grid语句始终返回None
。
解决方案是将窗口小部件创建与布局分离,即使您不需要保存对GUI窗口小部件的引用,这通常也是一种很好的做法:
ae = Entry(...)
be = Entry(...)
ce = Entry(...)
...
ae.grid(...)
be.grid(...)
ce.grid(...)