GUI

Python Tkinter widgets 基本的なウィジェット(4) Checkbutton

チェックボタンウィジェットは、バイナリ値(すなわちトグル)を保持する通常のボタンのようなもの。チェックボタンが押されると、トグルが反転し、そのコールバックが呼び出される。チェックボタンウィジェットは、ユーザがオプションをオン・オフできるようにするためによく使われる。

v = StringVar()
check = ttk.Checkbutton(parent, text='Use Metric', 
	    command=vChanged, variable=v,
	    onvalue='value', offvalue='imperial')

チェックボタンは、通常のボタンと同じオプションを使用し、追加でいくつかのオプションが用意されている。text、textvariable、image、compound の各設定オプションはラベルの表示を制御するもの。同様に、command オプションでは、ユーザーがチェックボタンを押すたびに呼び出されるコマンドを指定でき、invoke メソッドも同じコマンドを実行する。stateメソッドとinstateメソッドでは、disabled状態フラグを操作して、チェックボタンを有効または無効にできる。

ウィジェットの値

通常のボタンとは異なり、チェックボタンは値も保持する。textvariableオプションがウィジェットのラベルを変数にリンクする。チェックボタンのvariableオプションは、ウィジェットの現在値に変数をリンクする以外は、同じように動作する。この変数は、ウィジェットがトグルされるたびに更新される。デフォルトでは、チェックボタンはチェックされると1、チェックされないと0になる。これらはonvalueとoffvalueオプションで他の値に変更できる。

チェックボタンは自動的にリンクされた変数を作成しない。そのため、プログラム側で適切な開始値に初期化する必要がある。

リンク先の変数にonvalueもoffvalueもない(存在しない)場合、チェックボタンは特別な「tristate:トライステート」、よって不確定なモードになる。(不確定なモードではチェックボックスは、空であったり、チェックマークを保持したりする代わりに、ダッシュを1つ表示するかもしれない。内部的には、状態フラグalternateが設定されており、instateメソッドで確認することができる。)

check.instate(['alternate'])

今回はStringVarクラスのインスタンスを使用したが、Tkinterには他にもブーリアン、整数、浮動小数点数を格納できる変数クラスが用意されている。(Tkinterが使用するTcl APIは文字列ベースのため)常にStringVarを使用することができるが、格納されるデータが型に合っていれば他のものを選択できる。(すべて基本クラス Variable のサブクラス。)

s = StringVar(value="xyz")   # 初期値は ""(空文字)
b = BooleanVar(value=True)   # 初期値はFalse
i = IntVar(value=42)         # 初期値は0
d = DoubleVar(value=12.3)    # 初期値は0.0