このページでは tkinter におけるチェックボタン(Checkbutton
クラス)の使い方について解説していきたいと思います。
Contents
チェックボタンとは
チェックボタンは下の図のようなボタンになります(OS 等の環境によっては見た目が異なる可能性があります)。
このチェックボタンは、”ある項目の ON / OFF を切り替える” 目的で利用します。
左側の四角にチェックがある時はその項目が ON、チェックがない時はその項目が OFF であることを示します。
この ON / OFF はチェックボタンをクリックするたびに交互に切り替わります。つまり、クリックするたびに「チェックの有無」が交互に切り替わります。
tkinter 利用の主な目的は GUI アプリを作成することですので、チェックボタンはアプリの何かしらの設定の ON / OFF を “ユーザーに選択させたい” 時に利用するケースが一番多いと思います。
同様にユーザーにアプリの設定を行わせるためのウィジェットとしてラジオボタンがありますが、ラジオボタンの場合は “複数の選択肢から1つのみ” を選択させたい場面に向いています。チェックボタンの場合は単に ON / OFF を切り替えさせたい場面に向いています。
例えば、お絵描きアプリなどでペンで描画する線を “太線にする” という設定の ON / OFF を選択させるような場合には、下の図のようなチェックボタンを用意することになります。
ただし、ユーザーにチェックボタンの ON / OFF を切り替えさせるだけではチェックボタンを用意する意味がありません。
アプリが何らかの処理を行う際に、チェックボタンが ON / OFF のどちらであるかを判別し(チェックの有無を判別し)、その ON / OFF に応じて処理内容を切り替えるようにプログラミングすることで、初めてユーザーの ON / OFF の選択を反映するアプリに仕立てることができます。
例えば上の図のようなチェックボタンの例であれば、チェックがある時は “ペンで描画する線を太く”、チェックがない時は “ペンで描画する線を細く” するように処理を切り替えるようにプログラミングすることで、ユーザーの選択をアプリに反映することができるようになります。
チェックボタンの使い方
では、このチェックボタンの使い方について解説していきたいと思います。
tkinter でチェックボタンを使う際に行うことは大きく分けて下記の3つになります。
- チェックボタンウィジェットの作成
- ウィジェット変数との連動設定
- チェックボタンの ON / OFF の判別
これらの3つについて、ここから解説していきたいと思います。
スポンサーリンク
チェックボタンウィジェットの作成
チェックボタンは、tkinter の Checkbutton
クラスのコンストラクタを実行することで作成することができます。
# app はメインウィンドウ
check = tkinter.Checkbutton(
app,
text="チェックボタン1"
)
作成したチェックボタンを配置すると下の図のようなチェックボタンがアプリ上に表示されるようになります。
text
で指定した文字列がチェックボタンの右側のラベル部分に表示されます。
チェックボタンをクリックすれば、チェックの ON /OFF が、つまり “左側の四角のチェックの有無” が交互に切り替わる様子が確認できると思います。
ただし、現状だとチェックボタンを作っただけなので、チェックの ON / OFF は切り替わるものの、それによってアプリの動作や設定が切り替わるようなことはありません。
これを実現するためには、チェックの ON / OFF のどちらの状態であるかを判別し、それに応じて処理を切り替えるようにする必要があります。
それを行うための方法をここから解説していきます。
スポンサーリンク
ウィジェット変数との連動設定
チェックの ON / OFF のどちらの状態であるかを判別するためには、チェックボタンをウィジェット変数と連動させるようにする必要があります。
ウィジェット変数がどのようなものであるかが分からない方は、下記ページで解説していますので下記ページを参考にしていただければと思います。
Tkinterの使い方:ウィジェット変数について解説【StringVar・BooleanVar・IntVar・DoubleVar】ウィジェット変数との連動設定の仕方
チェックボタンとウィジェット変数との連動は、前準備としてウィジェット変数を作成し、そしてチェックボタン作成時に variable
オプションにそのウィジェット変数を指定することで設定することができます。
# ウィジェット変数の作成
check_v = tkinter.BooleanVar()
# app はメインウィンドウ
check = tkinter.Checkbutton(
app,
text="チェックボタン1",
variable=check_v,
onvalue=True,
offvalue=False
)
ウィジェット変数と連動する様子
上記の設定により、チェックボタンと variable
オプションに指定したウィジェット変数とが連動するようになります。
ここで、これらがどのように連動するのかについて解説しておきます。
まず、上記で設定する onvalue
と offvalue
はそれぞれ下記を指定するオプションになります。
onvalue
:チェックボタンが ON の時にウィジェット変数に設定される値offvalue
:チェックボタンが OFF の時にウィジェット変数に設定される値
さらに、上記のように設定することで、チェックボタンの ON / OFF を切り替えることで、variable
オプションに指定したウィジェット変数に設定される値が切り替わるようになります。
より具体的には、チェックボタンの ON / OFF を切り替えることで variable
オプションに指定したウィジェット変数に設定される値が下記のように切り替わるようになります。
- ON :
onvalue
に指定した値 - OFF:
offvalue
に指定した値
さらに、チェックボタンの「チェックの有無」という見た目が、variable
オプションに指定したウィジェット変数に設定される値に応じて切り替わるようになります。
より具体的には、ウィジェット変数に設定される値に応じて下記のようにチェックボタンの見た目が切り替わります。
onvalue
:チェックがあるonvalue
以外:チェックがない
ここまでをまとめると、下記のようにチェックボタンとウィジェット変数とが連動するようになります。
- チェックボタンへのクリック時:
- ウィジェット変数に設定される値が
onvalue
とoffvalue
とで切り替わる
- ウィジェット変数に設定される値が
- ウィジェット変数に設定される値の変化時:
- ウィジェット変数に設定されている値が
onvalue
になるとチェックが入る - ウィジェット変数に設定されている値が
onvalue
以外になるとチェックが外れる
- ウィジェット変数に設定されている値が
このようにチェックボタンとウィジェット変数が連動するため、「チェックボタンにチェックがある時」にはウィジェット変数には onvalue
の値が、「チェックボタンにチェックがない時」にはウィジェット変数には offvalue
の値が設定されていることになります。
チェックを入れる・チェックを外すが GUI からの操作のみで切り替えられる場合で限定した時の話になります
ウィジェット変数に設定されている値をスクリプトから無理矢理変化させるような場合は、ウィジェット変数に設定されている値が onvalue
・offvalue
以外になる場合があります
つまり、variable
オプションに指定したウィジェット変数に設定されている値を取得し、その値が onvalue
・offvalue
のどちらであるかを判断することで、チェックボタンが ON / OFF のどちらの状態か(チェックの有無がどちらか)を判別することができます。
チェックボタンの ON / OFF の判別
ここまで解説してきたように、チェックボタンの ON / OFF はウィジェット変数に設定されている値を取得することで判別することが可能です。
ウィジェット変数に設定されている値を取得するためには、ウィジェット変数の get
メソッドを実行します。
# vはウィジェット変数
value = v.get()
前述の通り、get
メソッドで取得した値が onvalue
と一致する場合はチェックボタンは ON の状態で、offvalue
と一致する場合(もしくは onvalue
以外の場合)はチェックボタンは OFF の状態であることが分かります。
あとは、このチェックボタンの ON / OFF に応じてアプリの動作や設定などを切り替える処理をスクリプトとして記述してやれば、ユーザーのチェックボタンの ON / OFF の選択をアプリの動作や設定に反映することができるようになります。
スポンサーリンク
チェックボタンウィジェットの利用例
ここまでの解説を踏まえたチェックボタンウィジェットの利用例は下記のスクリプトのようになります。
# -*- coding:utf-8 -*-
import tkinter
# マウスボタンが押されていているかどうかの判断用
press = False
def mouse_move_func(event):
global canvas
# 現在のマウスの位置
x = event.x
y = event.y
if check_v.get():
# チェクボタンにチェックが入っている場合
# ペンの太さを30pxに設定
px = 30
else:
# チェックボタンからチェックが外れている場合
# ペンの太さを10pxに設定
px = 10
# マウスボタンが押されている時だけ円を描画
if press:
canvas.create_oval(
# チェックボタンの設定に応じた大きさの縁を描画
x - px / 2, y - px / 2,
x + px / 2, y + px / 2,
fill="blue",
width=0
)
def mouse_click_func(event):
global press
# マウスボタンが押された
press = True
def mouse_release_func(event):
global press
# マウスボタンが離された
press = False
# アプリの作成
app = tkinter.Tk()
app.title(
"サンプルアプリ" # アプリのタイトル
)
# キャンバスの作成
canvas = tkinter.Canvas(
app, # キャンバスの作成先アプリ
width = 400, # キャンバスの横サイズ
height = 400, # キャンバスの縦サイズ
bg = "white" # キャンバスの色
)
# キャンバスの配置
canvas.pack()
# チェックボタンのON/OFF判別用のウィジェット変数を作成
check_v = tkinter.BooleanVar(value=False)
check = tkinter.Checkbutton(
app,
variable=check_v,
onvalue=True,
offvalue=False,
text="太線にする"
)
check.pack()
# イベントの受付
app.bind(
"<Motion>", # 受付けるイベント
mouse_move_func # そのイベント時に実行する関数
)
app.bind(
"<ButtonPress>", # 受付けるイベント
mouse_click_func # そのイベント時に実行する関数
)
app.bind(
"<ButtonRelease>", # 受付けるイベント
mouse_release_func # そのイベント時に実行する関数
)
# アプリの待機
app.mainloop()
スクリプトのベースは下記ページの最後に紹介しているお絵描きアプリです。
PythonでTkinterを使ってめちゃくちゃ簡単にGUIアプリを作る上記ページで紹介しているお絵描きアプリに対し、次の項目を設定するチェックボタンを追加しています。
- ペンを太くする
スクリプトを実行すると下の図のような画面のアプリが起動します。
チェックボタンからチェックを外した状態で、マウスをクリックしながらキャンバス上を移動させると「細めのペン」でお絵描きすることができます。
またチェックボタンにチェックを入れた状態で、マウスをクリックしながらキャンバス上を移動させると「太めのペン」でお絵描きすることができます。
このような動作から、チェックボタンの ON / OFF によってアプリの動作が変化していることが確認できると思います。
ウィジェット変数の作成
では、スクリプトでどのような処理を行なっているのかについて解説していきたいと思います。
まずは前準備として下記でウィジェット変数を作成しています。
check_v = tkinter.BooleanVar(value=False)
この check_v
がチェックボタンの variable
に設定するウィジェット変数になります。
ウィジェット変数のコンストラクタに指定する value
はウィジェット変数の設定値の初期値になります。
この value
には後述で紹介するチェックボタンの offvalue
オプションの値を設定するようにしています。なので、アプリ起動直後はチェックボタンのチェックは外れた状態になります。
逆に、value
にチェックボタンの onvalue
オプションの値を指定した場合は、アプリ起動直後にチェックボタンのチェックが入った状態になります。
このように “アプリ起動直後のチェックボタンのチェックの有無” をウィジェット変数の設定値の初期値によって切り替えられるのは、ウィジェット変数と連動する様子で説明したように、ウィジェット変数の設定値が onvalue
である場合のみチェックボタンのチェックが入るように “チェックボタンとウィジェット変数が連動する” ためです。
スポンサーリンク
チェックボタンウィジェットの作成
チェックボタンは前述の通り、Checkbutton
クラスのコンストラクタを実行することで作成することができます。
チェックボタンを作成しているのが下記部分になります。
check = tkinter.Checkbutton(
app,
variable=check_v,
onvalue=True,
offvalue=False,
text="太線にする"
)
他のウィジェット同様に作成するだけでは画面上に表示されませんので、作成後に配置を行う必要があります。このスクリプト例では pack
メソッドで配置を行なっています。
上記で作成する check
に対応するチェックボタンがアプリの UI 上における下の図のボタンになります。
スポンサーリンク
ウィジェット変数との連動設定
さらに上記の Checkbutton
クラスのコンストラクタを実行する際に、次のように onvalue
と offvalue
と variable
を設定しています。
onvalue
:True
offvalue
:False
variable
:check_v
これにより、チェックボタン check
とウィジェット変数 check_v
とが連動するようになります。
より具体的には、チェックボタン check
をクリックするたびに check_v
に設定される値が onvalue
に指定している値 True
と offvalue
に指定している値 False
とで交互に切り替わるようになります。
さらにウィジェット変数 check_v
の値(True
/ False
)に応じて、チェックボタン check
へのチェックの有無が切り替わるようになります。
チェックボタンの ON / OFF の判別
前述の通り、チェックボタンの ON / OFF はウィジェット変数(check_v
)の get
メソッドにより判別することが可能です。
この get
を実行しているのが mouse_move_func
の下記部分です。
if check_v.get():
# チェクボタンにチェックが入っている場合
# ペンの太さを30pxに設定
px = 30
else:
# チェックボタンからチェックが外れている場合
# ペンの太さを10pxに設定
px = 10
また上記では、この get
で取得した値が True
(onvalue
に指定している値)の場合と、False
(offvalue
にしている値)の場合とで、描画する円の直径(単位はピクセル)となる px
の値を切り替えるようにしています。
さらに、この px
の値を用いてキャンバスに描画する円のサイズ(より正確には円の開始座標と円の座標)を create_oval
メソッドに指定しています。この描画される円がお絵描きに用いるペンになります。
px
は get
で取得した値が True
の場合の方が大きな値になるようにしていますので、チェックボタンが ON の時にはペンが太くなるように動作することになります。
また、今回の例ではチェックの ON / OFF のみを示すため onvalue
には True
、offvalue
には False
を指定していますが、これらに設定値そのものを指定しても良いです。
例えば上記のスクリプトで言うと、onvalue
にチェック ON 時のペンの太さである 30
を、offvalue
にチェック OFF 時のペンの太さである 10
を指定しておけば、get
メソッドで取得した数値をそのまま create_ova
l に指定すればよいようになります。
実際にこのように onvalue
と offvalue
を指定した場合のスクリプト例は下記のようになります(ウィジェット変数に整数を設定できるように BoolearVar
クラスから IntVar
クラスへ変更しています)。
# -*- coding:utf-8 -*-
import tkinter
# マウスボタンが押されていているかどうかの判断用
press = False
def mouse_move_func(event):
global canvas
# 現在のマウスの位置
x = event.x
y = event.y
# マウスボタンが押されている時だけ円を描画
if press:
canvas.create_oval(
# チェックボタンの設定に応じた大きさの縁を描画
x - check_v.get() / 2, y - check_v.get() / 2,
x + check_v.get() / 2, y + check_v.get() / 2,
fill="blue",
width=0
)
def mouse_click_func(event):
global press
# マウスボタンが押された
press = True
def mouse_release_func(event):
global press
# マウスボタンが離された
press = False
# アプリの作成
app = tkinter.Tk()
app.title(
"サンプルアプリ" # アプリのタイトル
)
# キャンバスの作成
canvas = tkinter.Canvas(
app, # キャンバスの作成先アプリ
width = 400, # キャンバスの横サイズ
height = 400, # キャンバスの縦サイズ
bg = "white" # キャンバスの色
)
# キャンバスの配置
canvas.pack()
# チェックボタンのON/OFF判別用のウィジェット変数を作成
check_v = tkinter.IntVar(value=10)
check = tkinter.Checkbutton(
app,
variable=check_v,
onvalue=30,
offvalue=10,
text="太線にする"
)
check.pack()
# イベントの受付
app.bind(
"<Motion>", # 受付けるイベント
mouse_move_func # そのイベント時に実行する関数
)
app.bind(
"<ButtonPress>", # 受付けるイベント
mouse_click_func # そのイベント時に実行する関数
)
app.bind(
"<ButtonRelease>", # 受付けるイベント
mouse_release_func # そのイベント時に実行する関数
)
# アプリの待機
app.mainloop()
チェックボタンのオプション
続いてチェックボタンに指定可能なオプションについて解説していきたいと思います。
まずチェックボタンに指定可能なオプションの一覧は、下記により表示することが可能です。
# checkはCheckbuttonのインスタンス
print(check.keys())
チェックボタンに指定可能なオプションは、下記を除いてラジオボタンと同じです。
- チェックボタンにのみあり
onvalue
offvalue
- ラジオボタンにのみあり
value
onvalue
と offvalue
は前述で解説した通り、チェックボタン ON / OFF 時に variable
に指定したウィジェット変数に設定される値になります。
上記以外のチェックボタンのオプションに関してはラジオボタンと同じです。ラジオボタンのオプションに関しては下記ページのラジオボタンのオプションで解説していますので、チェックボタンのオプションに関してもぜひ下記ページを参考にして設定していただければと思います。
Tkinterの使い方:ラジオボタン(Radiobutton)の使い方チェックボタンの右側のラベル部分に関しても、ラジオボタン同様にラベルウィジェットと同様のオプション指定を行うことが可能です。
スポンサーリンク
チェックボタンのメソッド
次に、チェックボタン特有の下記のメソッドについて解説していきたいと思います。
toggle
invoke
select
deselect
flash
メソッドも存在するようですが、すみません、このメソッドの動作については分かりませんでしたので説明は省略させていただきます…。
また、メソッドに関してもオプション同様にラジオボタンに似ていますが、ちょっとだけ動作が異なるので上記の4つのメソッド全てについて解説しておきたいと思います。
toggle
toggle
は実行したチェックボタンの ON / OFF を切り替えるメソッドです。
より具体的には、チェックボタンが ON の状態で toggle
メソッドを実行した場合はチェックボタンが OFF になります(つまりチェックが外れる)。
一方で、チェックボタンが OFF の状態でtoggle
メソッドを実行した場合はチェックボタンが ON になります(つまりチェックが入る)。
要は、”ほぼ” チェックボタンをクリックした時の動作を toggle
メソッドで実行することができます。ただし、toggle
メソッドにおいては、実行してもチェックボタンに設定した command
は実行されません。
command
の実行も含めて行いたい場合は、toggle
メソッドではなく次に説明する invoke
メソッドを実行します。
invoke
invoke
は toggle
メソッド同様にチェックボタンの ON / OFF を切り替え、さらに command
に指定した関数・メソッドを実行するメソッドです。
要は invoke
メソッドの実行により、マウスでチェックボタンをクリックした時と同じ動作をさせることができます。command
に指定した関数・メソッドを実行したくない場合は、前述の toggle
を利用します。
スポンサーリンク
select
select
は実行したチェックボタンを ON にするメソッドです(チェックを入れるメソッド)。
チェックボタンが OFF の状態でこのメソッドを実行すれば、メソッドを実行したチェックボタンが ON になります。一方で ON の状態でメソッドを実行しても特に何も動作しません。
チェックボタンが ON の状態の時にメソッド実行により OFF にしたい場合は、前述の toggle
メソッドを利用します。
deselect
deselect
は select
メソッドとは逆で、実行したチェックボタンを OFFにするメソッドです(チェックを外すメソッド)。
チェックボタンが ON の状態でこのメソッドを実行すれば、メソッドを実行したチェックボタンが OFF になります。一方で OFF の状態でメソッドを実行しても特に何も動作しません。
チェックボタンが OFF の状態の時にメソッド実行により ON にしたい場合は、前述の toggle
メソッドを利用します。
メソッドの利用例
各メソッドを利用したスクリプト例は下記のようになります。
# -*- coding:utf-8 -*-
import tkinter
def check_toggle():
check.toggle()
def check_invoke():
check.invoke()
def check_select():
check.select()
def check_deselect():
check.deselect()
def print_check():
print("チェックボタンがクリックされました")
# アプリの作成
app = tkinter.Tk()
app.title(
"サンプルアプリ" # アプリのタイトル
)
# チェックボタンのON/OFF判別用のウィジェット変数を作成
check_v = tkinter.IntVar(value=10)
check = tkinter.Checkbutton(
app,
variable=check_v,
onvalue=30,
offvalue=10,
text="太線にする",
command=print_check
)
check.pack()
button1 = tkinter.Button(
app,
text="チェックボタンをtoggle",
command=check_toggle
)
button1.pack()
button1 = tkinter.Button(
app,
text="チェックボタンをinvoke",
command=check_invoke
)
button1.pack()
button3 = tkinter.Button(
app,
text="チェックボタンをselect",
command=check_select
)
button3.pack()
button4 = tkinter.Button(
app,
text="チェックボタンをdeselect",
command=check_deselect
)
button4.pack()
# アプリの待機
app.mainloop()
このスクリプトでは下記の4つのボタンを用意しており、それぞれのボタンを押すことでチェックボタンが各メソッドを実行するようになっています。
-
- チェックボタンをtoggle
- チェックボタンをinvoke
- チェックボタンをselect
- チェックボタンをdeselect
「チェックボタンをtoggle」を押した時はチェックボタンの ON / OFF が切り替わることが確認できると思います。
さらに、チェックボタンが OFF の状態で「チェックボタンをselect」を押した時は、チェックボタンが ON になること、チェックボタンが ONの状態で「チェックボタンをdeselect」を押した時は、チェックボタンが OFF になることも確認できると思います。
また、チェックボタンの command
で指定している関数 print_check
では、標準出力に “チェックボタンがクリックされました” というメッセージを出力するようにしています。
invoke
以外の実行時にはこのメッセージが表示されませんが、invoke
実行時にはこのメッセージが表示される、つまり invoke
実行時には command
で指定した関数が実行されているところも確認できると思います。
スポンサーリンク
まとめ
このページでは python の tkinter における「チェックボタンの使い方」について解説しました!
チェックボタンはアプリの機能や設定の ON / OFF をユーザーに切り替えられるようにするために便利なウィジェットになります。
このウィジェットに関しても、使いこなすためにはウィジェット変数との連動の知識が必要です。
ウィジェット変数については下記ページで解説していますので、詳しく知りたい方はこちらをご覧いただければと思います。
Tkinterの使い方:ウィジェット変数について解説【StringVar・BooleanVar・IntVar・DoubleVar】また、オプションやメソッドに関してもラジオボタンに似ています。どちらかを使いこなせれば他方も簡単に使えるようになるので、まずはチェックボタンもしくはラジオボタンのどちらか一方の使い方を理解するのが良いと思います!
ラジオボタンについては下記ページで解説していますので、ラジオボタンについて詳しく知りたい方はこちらを読んでいただければと思います!
Tkinterの使い方:ラジオボタン(Radiobutton)の使い方