运行Python tkinter代码时所有复选框自动被选中,该如何解决?
问题根因
你绑定复选框用的是StringVar类型变量,但复选框的onvalue、offvalue设置的是整数1和0,二者类型不匹配。StringVar初始化的默认值是空字符串,和offvalue=0不相等,Tkinter无法匹配到未选中状态,就会默认将复选框置为选中/半选中状态。
解决方案
方案1:将变量替换为IntVar(更推荐)
IntVar默认初始化值就是0,刚好对应你设置的offvalue=0,启动时就会默认是未选中状态,原有cancel函数逻辑不需要修改,仅需要替换变量类型即可:
# 所有StringVar统一替换为IntVar Cancel1=tkinter.IntVar() Cancel2=tkinter.IntVar() Cancel3=tkinter.IntVar() Cancel4=tkinter.IntVar() Cancel5=tkinter.IntVar() Cancel6=tkinter.IntVar() Cancel7=tkinter.IntVar() Cancel8=tkinter.IntVar() def cancel() : Cancel1.set(0) Cancel2.set(0) Cancel3.set(0) Cancel4.set(0) Cancel5.set(0) Cancel6.set(0) Cancel7.set(0) Cancel8.set(0) window.title("Menu") c1 = tkinter.Checkbutton(window,text="Pizza("+str(cijenaPizza)+ ")",onvalue=1,offvalue=0,variable=Cancel1) c1.grid(row=0,column=1,sticky=W)
方案2:保留StringVar,同步值类型
如果你需要继续用StringVar,就把开关值和初始化值都同步为字符串类型即可:
# 所有StringVar初始化时指定默认值为字符串"0" Cancel1=tkinter.StringVar(value="0") Cancel2=tkinter.StringVar(value="0") # 其余变量同上配置 def cancel() : Cancel1.set("0") Cancel2.set("0") # 其余变量同上设置为字符串"0" # 复选框的onvalue、offvalue修改为字符串类型 c1 = tkinter.Checkbutton(window,text="Pizza("+str(cijenaPizza)+ ")",onvalue="1",offvalue="0",variable=Cancel1) c1.grid(row=0,column=1,sticky=W)
内容的提问来源于stack exchange,提问作者CupidONO
相关产品推荐
相关产品推荐

