Python TKinter Checkbutton Half States

时间:2017-09-03 19:30:05

标签: python tkinter

我注意到,在单击未选中复选框时,框会切换到“半状态”,然后再翻转到完全选中状态。它看起来像这样:

enter image description here

有什么方法可以阻止这种情况吗?由于这个原因,检查/取消检查的时间比应该的要长。

#!/usr/bin/python
from random import randint
from Tkinter import *

# Set up main window settings
master = Tk()
master.title ("Window")
master.resizable(width = FALSE, height = FALSE)

def femaleOption():
    maleCheckbox.deselect()

def maleOption():
    femaleCheckbox.deselect()

#Create female checkbox
femaleIsChecked = IntVar()
femaleCheckbox = Checkbutton(master, text = "Female", command = femaleOption, variable = femaleIsChecked)
femaleCheckbox.select()

#Create male checkbox
maleCheckbox = Checkbutton(master, text = "Male", command = maleOption)

femaleCheckbox.pack()
maleCheckbox.pack()

master.mainloop()

1 个答案:

答案 0 :(得分:3)

这个“半状态”代表tristate值。根据您的配置方式,当关联变量的值为空字符串时,您通常会看到这一点。这是因为默认的tristatevalue是空字符串。

来自规范tcl/tk documentation

  

如果选中了一个检查按钮,则通常使用选定的外观绘制指标,并将与检查按钮关联的Tcl变量设置为特定值(通常为1)。指示符内部带有复选标记。如果未选中复选框,则使用取消选择的外观绘制指标,并将关联变量设置为不同的值(通常为0)。在内部没有复选标记的情况下绘制指标。在变量(如果指定)具有与三态值匹配的值的特殊情况下,指示符以三态外观绘制,并处于指示混合或多个值的三态模式。

这意味着您的代码中的某个位置可能会显式或隐式地将变量设置为空字符串。

防止这种情况的方法是确保正确定义关联变量(即:不是局部变量),并且始终将它们设置为onvalue(默认值1)或{{1} }(默认为0)。