2017-09-03 62 views
-1

我注意到,当点击未勾选的复选框时,在翻转到完全检查之前,该框切换到“半状态”。它看起来像这样:Python TKinter Checkbutton Half States

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() 
+0

你在哪个平台上?还有其他复选框绑定到相同的'IntVar'吗?只是有一个复选框,我不能在我的Mac上重现,如果有更多的代码需要获得该状态[请包括它](https://stackoverflow.com/help/mcve) –

+0

请创建一个[mcve] –

+0

我在苹果电脑。我会尽快用更多的代码更新这篇文章。 –

回答

1

该“半状态”表示tristate的值。根据你如何配置这个,当关联变量的值是空字符串时,你通常会看到这个。这是因为默认tristatevalue是空字符串。

从规范tcl/tk documentation

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

这是什么意思是说,在代码中的某个地方,您可能会将该变量设置为空字符串,无论是显式还是隐式。

,以防止这个问题的方法是,以确保相关的正确定义变量(即:不是局部变量),而且他们总是设置为在onvalue(默认为1)或offvalue(默认为0)。