0

I am working with the tkinter module in python 3.3 I am relatively new to this and am working with entry boxes. for some reason when I run the following code I get an error message saying AttributeError: 'NoneType' object has no attribute 'get'. Could someone explain to me why? I did a similar program with a single entry that workded just fine.

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()
4

1 回答 1

6

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

AttributeError:“NoneType”对象没有属性“get”

注意它说的地方'NoneType'?这意味着None即使您认为它是其他变量,某些变量也是如此。显然,None没有名为get. 所以,你必须问自己,为什么会这样None

您没有在问题中显示它,但很可能错误发生在ae变量(以及变量bece变量)上。所以问题是,他们为什么会这样None

它们的原因None是您将它们设置为:

ae = 条目(主).grid(行=0,列=1)

在 python 中,当你这样做时x=a().b(),x 会得到 的值b()。因此,您正在设置语句ae的值grid(...),并且网格语句始终返回None.

解决方案是将您的小部件创建与布局分开,这通常是一种很好的做法,即使您不需要保存对 GUI 小部件的引用:

ae = Entry(...)
be = Entry(...)
ce = Entry(...)
...
ae.grid(...)
be.grid(...)
ce.grid(...)
于 2013-06-27T19:26:40.563 回答