2015-05-01 130 views
0

我得到AttributeError: float object has no attribute set在61號線,在calcmpg.self.mpg.set(self.mpg)如何正確的python屬性錯誤:Float對象有沒有屬性「設置」

如何糾正呢?

這裏是我寫的程序:

該程序會提示用戶輸入的行駛里程和消耗加侖計算MPG的數量。

import tkinter 

import tkinter.messagebox 

class MilesPerGallonGUI: 

    def __init__(self): 

       #create main window 
     self.main_window = tkinter.Tk() 

       #create frames 
     self.frame1 = tkinter.Frame(self.main_window) 
     self.frame2 = tkinter.Frame(self.main_window) 
     self.frame3 = tkinter.Frame(self.main_window) 
     self.frame4 = tkinter.Frame(self.main_window) 

       #create label widgets 
     self.label1 = tkinter.Label(self.frame1, text = 'Enter miles: ') 
     self.label2 = tkinter.Label(self.frame2, text = 'Enter gallons: ') 

       #create entry widgets 
     self.entry1 = tkinter.Entry(self.frame1, width = 10) 
     self.entry2 = tkinter.Entry(self.frame2, width = 10) 

       #pack 
     self.label1.pack (side = 'left') 
     self.entry1.pack (side = 'left') 
     self.label2.pack (side = 'left') 
     self.entry2.pack (side = 'left') 

       # 
     self.mpg = tkinter.StringVar() 
     self.res = tkinter.Label(self.frame3, text = 'The MPG value is: ') 
     self.res_label = tkinter.Label(self.frame3, textvariable = self.mpg) 
     self.res.pack(side = 'left') 
     self.res_label.pack(side = 'left') 
     self.calc = tkinter.Button(self.frame4, text = 'Calculate MPG', command = self.calcmpg) 
     self.quit_button = tkinter.Button(self.frame4, text = 'Quit', command = self.main_window.destroy) 
     self.calc.pack(side = 'left') 
     self.quit_button.pack(side = 'left') 
     self.frame1.pack() 
     self.frame2.pack() 
     self.frame3.pack() 
     self.frame4.pack() 
     tkinter.mainloop() 


       #calcmpg for a callback function for the calculate button 
    def calcmpg(self): 
     self.test1 = float(self.entry1.get()) 
     self.test2 = float(self.entry2.get()) 
     self.mpg = float(self.test1/self.test2) 
     self.mpg.set(self.mpg) 

gu = MilesPerGallonGUI() 
+0

您使用'self.mpg =浮動(self.test1/self.test2)更換線

self.mpg = float(self.test1/self.test2) self.mpg.set(self.mpg) 

'所以,創建一個浮動,應該float.set做? –

+0

爲什麼你使用'set',因爲你在浮點值上使用set方法而引發錯誤。 – ZdaR

回答

3

的問題是在這裏:

self.mpg = float(self.test1/self.test2) 
    self.mpg.set(self.mpg) 

早些時候,你有self.mpg = tkinter.StringVar()。然而,在calcmpg方法中,您將self.mpg分配給一個浮點數。一個float沒有set方法。

3

您的變量設置爲浮動第一:

self.mpg = float(self.test1/self.test2) 
self.mpg.set(self.mpg) 

因此,第二行上您要使用StringVar對象,但不再存在。

mpg而不是一個局部變量:

new_mpg = float(self.test1/self.test2) 
self.mpg.set(new_mpg) 

通過不具有浮動更換self.mpg,而是採用了全新的,獨立的地方,而不是,你仍然可以使用StringVar對象的方法。

3

通過

self.mpg.set(float(self.test1/self.test2)) 
+0

你們都很棒!我感謝你的幫助!非常感謝! – Treece

+0

不客氣:-) –

相關問題