2013-06-27 90 views
0

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

變化已經問了好幾個時間在這個網站上。例如[Python TkInter - AttributeError:'NoneType'對象沒有'get'屬性](http://stackoverflow.com/questions/1101750/python-tkinter-attributeerror-nonetype-object-has-no-attribute-get) 。 –

回答

4

仔細看看錯誤信息:它說了什麼?它正在告訴你問題是什麼。它甚至告訴你線路號碼。

AttributeError: 'NoneType' object has no attribute '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

的解決方案是分開的佈局你的widget創建,這是一般,即使你並不需要保存到GUI控件引用一個很好的做法:這個問題的

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