2017-09-03 49 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)。

相關問題