Tkinter监听两个IntVar取值实时展示最小值时标签不更新如何解决
问题原因
你定义的Terre_calcul计算逻辑没有和Spinbox绑定的变量关联,Spinbox数值变化时不会触发计算,Label绑定的terreV一直保持IntVar的默认初始值0,所以不会更新。
修复方案
只需要添加2处绑定逻辑即可:
- 给
con和vol两个IntVar变量添加写入监听,数值变动时自动触发计算函数 - 初始化时主动调用一次计算函数,保证初始状态的显示正确
另外可以简化判断逻辑,直接用Python内置的min()函数取两个值的最小值,代码更简洁。
修改后的完整代码
# 注意你原代码漏了tkinter导入,运行前请先补上这行 from tkinter import * def Terre_calcul(*args) : tr1 = con.get() tr2 = vol.get() # 直接用min函数取最小值,无需写if判断 terreV.set(min(tr1, tr2)) ################################# #creation of the parent widget win = Tk() win.title("Fiche personnage") #widgets dimensions win.geometry("800x1029+0+0") win.resizable(width= False, height= False) ################################## #Constitution con = IntVar() conE = Spinbox(win, from_= 1, to= 10, width= 1, textvariable= con) conE.place(x= 180, y= 165) con.set(conE.get()) # 绑定变量变化监听 con.trace('w', Terre_calcul) #Volonté vol = IntVar() volE = Spinbox(win, from_= 1, to= 10, width= 1, textvariable= vol) volE.place(x= 168, y= 196) vol.set(volE.get()) # 绑定变量变化监听 vol.trace('w', Terre_calcul) #Score terreV = IntVar() terre = Label(win, textvariable= terreV) terre.tkraise(aboveThis= None) terre.place(x= 266, y= 212) # 初始化主动调用一次计算,保证初始显示正确 Terre_calcul() win.mainloop()
内容的提问来源于stack exchange,提问作者Spoon
相关产品推荐
相关产品推荐

