![](/img/trans.png)
[英]How to solve the Attribute error 'float' object has no attribute 'split' in python?
[英]How to correct Python Attribute Error: Float object has no attribute 'set'
我得到AttributeError: float object has no attribute set
在calcmpg.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.