Tkinter Checkbutton

ttk.Checkbutton とは?

Tkinter の ttk.Checkbutton ウィジェットは、いわゆるチェックボックスを表すウィジェットです。Tk ではチェックボタンといいます。

チェックボタンはなんらかの状態の ON/OFF あるいは YES/NO などの選択状態を表すのに使われます。

ttk.Checkbutton のオプション

ttk.Checkbutton ウィジェットの標準オプション

ttk.Checkbutton ウィジェットでは次の標準オプションが利用できます。

  • class
  • compound
  • cursor
  • image
  • state
  • style
  • takefocus
  • text
  • textvariable
  • underline
  • width

ttk.Checkbutton ウィジェットの command オプション

ttk.Checkbutton ウィジェットの command オプションは、チェック状態が変わった時に実行する関数を指定します。

ttk.Checkbutton ウィジェットの offvalue オプション

ttk.Checkbutton ウィジェットの offvalue オプションは、チェックされていない時の値を指定します。

チェック状態が OFF に変化した時に、この値が variable オプションで指定した変数にセットされます。

ttk.Checkbutton ウィジェットの onvalue オプション

ttk.Checkbutton ウィジェットの onvalue オプションは、チェックされた時の値を指定します。

チェック状態が ON に変化した時に、この値が variable オプションで指定した変数にセットされます。

ttk.Checkbutton ウィジェットの variable オプション

ttk.Checkbutton ウィジェットの variable オプションは、チェックボタンのチェック状態が変化した時に値を設定する変数を指定します。

ttk.Checkbutton のスタイル

ttk.Checkbutton のスタイルクラス名は TCheckbutton です。

TCheckbutton では次のオプションが指定できます。

  • background : 背景色の設定
  • compound : 画像と文字の表示位置の設定
  • foreground : 文字色の設定
  • indicatorbackground
  • indicatorcolor
  • indicatormargin
  • indicatorrefief
  • padding

ttk.Checkbutton でセットされた値を表示する例

次のようなウィンドウを作成します。

Tkinter window with two checkboxes

Checkbutton のラベルは Button と同様に text オプションで指定します。

Checkbutton は値を持つことができます。デフォルトで 1 です。 チェックされているときの値を onvalue オプションで、チェックされていない時の値を offvalue オプションで指定します。

値は変数に格納して保持します。次の例では StringVar で変数を作成して、variable オプションに設定することで、onvalue や offvalue で指定した値を保持できます。

from tkinter import *
from tkinter import ttk

root = Tk()
root.title('Checkbutton 1')

# Frame
frame1 = ttk.Frame(root, padding=(10))
frame1.grid()

# Checkbutton 1
v1 = StringVar()
v1.set('0') # 初期化
cb1 = ttk.Checkbutton(
    frame1, padding=(10), text='Option 1',
    variable=v1,
    command=lambda: print('v1 = %s' % v1.get()))

# Checkbutton 2
v2 = StringVar()
# v2.set('B') # 初期化しない
cb2 = ttk.Checkbutton(
    frame1, padding=(10), text='Option 2',
    onvalue='A', offvalue='B',
    variable=v2,
    command=lambda: print('v2 = %s' % v2.get()))

# Button
button1 = ttk.Button(
    frame1, text='Show values',
    command=lambda: print('v1 = %s, v2 = %s' % (v1.get(), v2.get())))

# Layout
cb1.grid(row=0, column=0)
cb2.grid(row=0, column=1)
button1.grid(row=1, column=0, columnspan=2)

root.mainloop()

このコードではチェックボタンをチェック、クリアをする度に、チェックボタンの変数として指定した String 変数の値をコンソールに出力します。

Tkinter output by clicking checkbox

ttk.Checkbutton の variable にセットした変数の初期化

変数は特定の値で初期化されないので注意が必要です。

上記の例では、二つ目のチェックボタン用の変数は (わざと) 初期化していません。 こうすると、一度も二つ目のチェックボタンのチェック状態を変えないまま Show values ボタンを押すと、チェックボタン 2 の値は空のままであることが確認できます。

このため、チェックボタンの値を保持するために使っている変数は、チェックの状態に合うようにあらかじめ初期化しておく方が一貫性が保てるので良いでしょう。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門