2017-09-03 10 views
-1

このチェックボックスをオフにすると、チェックボックスが完全にチェックされていない状態に切り替わる前に、ボックスが「半状態」に切り替わります。それは次のようになります。これを防ぐためにどのような方法はPython TKinter Checksボタン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'に他のチェックボックスが結ばれていますか?ちょうど1つのチェックボックスを持っている私は、その状態を取得するために必要なより多くのコードがある場合、私のMacで再現することはできません[含める](https://stackoverflow.com/help/mcve) –

+0

[mcve]を作成してください –

+0

私はマック。私はすぐにこの記事をより多くのコードで更新します。 –

答えて

1

この「半状態」は、tristateの値を表します。これをどのように設定するかによって、関連する変数の値が空の文字列である場合には、通常これが表示されます。これは、デフォルトのtristatevalueが空の文字列であるためです。カノニカルtcl/tk documentationから

チェックボタンが選択されるインジケータは、通常、選択された外観で描画され、及びチェックボタンに関連付けられたTcl変数が特定の値(通常は1)に設定されている場合。インジケータの内側にはチェックマークが付いています。チェックボタンが選択されていない場合、インジケータは非選択の外観で描画され、関連する変数は別の値(通常は0)に設定されます。インジケータは、内部にチェックマークを付けずに描かれています。変数(指定されている場合)が3値値と一致する特別な場合、インジケータは3状態表示で描画され、混合状態値または複数値を示す3状態モードになります。

これは、コードのどこかで、変数を明示的にまたは暗黙的に空の文字列に設定する可能性があることを意味します。

これを防ぐ方法は、関連付けられた変数が正しく定義されていること(つまり、ローカル変数ではない)、常にonvalue(デフォルト1)またはoffvalue(デフォルトは0)のいずれかに設定されていることを確認することです。