【问题标题】:object has no attribute get [duplicate]对象没有属性获取[重复]
【发布时间】:2013-06-25 10:22:07
【问题描述】:

我正在使用 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()

【问题讨论】:

标签: python tkinter tkinter-entry


【解决方案1】:

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

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(...) 语句的值,并且网格语句始终返回None

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

ae = Entry(...)
be = Entry(...)
ce = Entry(...)
...
ae.grid(...)
be.grid(...)
ce.grid(...)

【讨论】:

    猜你喜欢
    • 2019-07-16
    • 2011-09-12
    • 2011-09-20
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多