Tkinter中DoubleVar相加报错求助:计税基数求和功能实现遇阻
解决tkinter中DoubleVar相加的TypeError问题
嘿,我一眼就看出问题所在了——你在尝试直接把两个DoubleVar对象相加,而不是获取它们实际存储的数值!
错误原因
v_result和v_result2是tkinter提供的变量对象(DoubleVar类型),不是普通的浮点数。直接用+操作符对这两个对象进行运算,Python自然不知道该怎么处理,所以抛出了TypeError: unsupported operand type(s) for +: 'DoubleVar' and 'DoubleVar'这个错误。
要获取DoubleVar里存储的实际数值,你需要调用它的.get()方法;而设置数值用.set()方法,这部分你前面已经做对了,只是求和的时候忘了这一点。
修正方案
把报错的那一行:
v_result3.set(float(v_result + v_result2))
替换成:
v_result3.set(v_result.get() + v_result2.get())
因为.get()会返回DoubleVar中存储的浮点数,两个浮点数直接相加就没问题了,甚至不需要额外转float(当然转了也不会出错,只是多此一举)。
完整修正后的代码
from tkinter import * root = Tk() root.geometry('350x350') l_label = Label(root, text='Receita 1') l_label.place(x=10, y=10) e_entry = Entry(root) e_entry.place(x=100, y=10) l_label2 = Label(root, text='Receita 2') l_label2.place(x=10, y=40) e_entry2 = Entry(root) e_entry2.place(x=100, y=40) # --- v_result = DoubleVar() l_rst = Label(root, textvariable=v_result) l_rst.place(x=10, y=100) v_result2 = DoubleVar() l_rst2 = Label(root, textvariable=v_result2) l_rst2.place(x=10, y=140) v_result3 = DoubleVar() l_rst3 = Label(root, textvariable=v_result3) l_rst3.place(x=10, y=220) def calc(): v_result.set(float(e_entry.get()) * 10 / 100) v_result2.set(float(e_entry2.get()) * 10 / 100) # 修正后的求和代码 v_result3.set(v_result.get() + v_result2.get()) bt = Button(root, text='Calc', command=calc) bt.place(x=10, y=180) root.mainloop()
额外小提示
如果担心输入框为空或者输入非数字导致报错,可以在calc函数里加一点异常处理,比如:
def calc(): try: val1 = float(e_entry.get()) val2 = float(e_entry2.get()) v_result.set(val1 * 10 / 100) v_result2.set(val2 * 10 / 100) v_result3.set(v_result.get() + v_result2.get()) except ValueError: v_result3.set("输入无效!")
这样用户输入非数字内容时,程序不会崩溃,还会给出提示~
内容的提问来源于stack exchange,提问作者gdn
相关产品推荐
相关产品推荐

