对象没有属性get

时间:2013-06-27 19:04:07

标签: python tkinter tkinter-entry

我正在使用python 3.3中的tkinter模块我对此比较陌生并正在使用输入框。出于某种原因,当我运行以下代码时,我收到一条错误消息,指出At​​tributeError:'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()

1 个答案:

答案 0 :(得分:5)

仔细查看错误消息:它说什么?它正好告诉你问题是什么。它甚至会告诉你行号。

  

AttributeError:'NoneType'对象没有属性'get'

请注意'NoneType'所在的位置?这意味着某些变量是None,即使您认为它是其他变量。显然,None没有名为get的方法。所以,你必须问自己,为什么它是None

您没有在问题中显示,但错误很可能发生在ae变量(以及bece变量)上。所以问题是,为什么他们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(...)