如何纠正Python属性错误:Float对象没有属性'set'

时间:2015-05-01 14:31:31

标签: python

我在AttributeError: float object has no attribute set

的第61行得到calcmpg.self.mpg.set(self.mpg)

我该如何纠正?

这是我写的程序:

此程序会提示用户输入行驶里程数和消耗的加仑数来计算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()

3 个答案:

答案 0 :(得分:3)

问题在于:

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

之前,您有self.mpg = tkinter.StringVar()。但是,在calcmpg方法中,您将self.mpg分配给float。 float没有set方法。

答案 1 :(得分:3)

首先将变量设置为float:

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对象方法。

答案 2 :(得分:3)

替换

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

通过

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