Python千克转磅计算器报错:IntVar与float无法执行乘法运算
问题:TKinter千克转磅计算器报错TypeError
我编写了一个基于tkinter的千克(KG)转磅(LBS)Python计算器,代码如下(含波兰语注释):
import tkinter as tk from tkinter import ttk import ttkbootstrap #funkcja do przeliczania def przelicz(): kilogram_input = input_string funt_output = output_string funt_output = kilogram_input * 2.204 #tworzenie okna okno = tk.Tk() okno.title('Nowe Okno') okno.geometry('500x250') #dodawanie rzeczy label = ttk.Label(master=okno,text = 'Kilogramy na Funty', font='Consolas, 40') label.pack() input_string = tk.IntVar() input_label = ttk.Entry(okno, textvariable=input_string) input_label.pack(pady=15) button = ttk.Button(okno, text='przelicz', style='info', command=przelicz) button.pack(padx=10) output_string = tk.StringVar() output = ttk.Label(master=okno, text = "", font='Consolas, 30', textvariable=output_string) #uruchamianie okno.mainloop()
运行时出现以下错误:
TypeError: unsupported operand type(s) for *: 'IntVar' and 'float'
错误指向行:funt_output = kilogram_input * 2.204
问题分析与修复
错误原因
你直接将TKinter的IntVar对象当作数值进行运算了。IntVar是TKinter用于绑定控件的变量容器,不是直接的整数类型,必须通过.get()方法提取它存储的实际数值;同理,要更新StringVar的显示内容,需要用.set()方法赋值,而不是直接赋值。
代码修正点
- 在
przelicz函数中,获取输入框的数值时,调用input_string.get()而非直接使用input_string - 计算完成后,用
output_string.set()将结果赋值给输出变量,同时把数值转为格式化后的字符串 - 原代码中
funt_output = output_string这行完全多余,直接删除 - 原代码漏了输出标签的
.pack()调用,补上后才能显示计算结果
修正后的完整代码
import tkinter as tk from tkinter import ttk import ttkbootstrap #funkcja do przeliczania def przelicz(): # 获取IntVar存储的实际整数数值 kilogram_input = input_string.get() # 计算磅值并保留两位小数 funt_output = round(kilogram_input * 2.204, 2) # 将结果赋值给StringVar更新显示 output_string.set(f"{funt_output}") #tworzenie okna okno = tk.Tk() okno.title('Nowe Okno') okno.geometry('500x250') #dodawanie rzeczy label = ttk.Label(master=okno,text = 'Kilogramy na Funty', font='Consolas, 40') label.pack() input_string = tk.IntVar() input_label = ttk.Entry(okno, textvariable=input_string) input_label.pack(pady=15) button = ttk.Button(okno, text='przelicz', style='info', command=przelicz) button.pack(padx=10) output_string = tk.StringVar() output = ttk.Label(master=okno, text = "", font='Consolas, 30', textvariable=output_string) # 新增pack方法,让输出标签显示在窗口中 output.pack(pady=15) #uruchamianie okno.mainloop()
内容的提问来源于stack exchange,提问作者Chillezer
相关产品推荐
相关产品推荐

