繁体   English   中英

如何更正Python属性错误:Float对象没有属性“ set”

[英]How to correct Python Attribute Error: Float object has no attribute 'set'

我得到AttributeError: float object has no attribute setcalcmpg.self.mpg.set(self.mpg) ,第61行的AttributeError: float object has no attribute set

我该如何纠正?

这是我编写的程序:

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

问题在这里:

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

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

首先将变量设置为浮点数:

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)

通过不用float代替self.mpg ,而是使用新的单独的本地,您仍然可以使用StringVar对象方法。

更换线

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

通过

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM