Tkinterの使い方:チェックボタン(Checkbutton)の使い方

チェックボタンの解説ページアイキャッチ

このページでは tkinter におけるチェックボタン(Checkbutton クラス)の使い方について解説していきたいと思います。

チェックボタンとは

チェックボタンは下の図のようなボタンになります(OS 等の環境によっては見た目が異なる可能性があります)。

チェックボタンの例

このチェックボタンは、”ある項目の ON / OFF を切り替える” 目的で利用します。

左側の四角にチェックがある時はその項目が ON、チェックがない時はその項目が OFF であることを示します。

この ON / OFF はチェックボタンをクリックするたびに交互に切り替わります。つまり、クリックするたびに「チェックの有無」が交互に切り替わります。

クリックでチェックボタンのON/OFFが切り替わる様子

tkinter 利用の主な目的は GUI アプリを作成することですので、チェックボタンはアプリの何かしらの設定の ON / OFF を “ユーザーに選択させたい” 時に利用するケースが一番多いと思います。

同様にユーザーにアプリの設定を行わせるためのウィジェットとしてラジオボタンがありますが、ラジオボタンの場合は “複数の選択肢から1つのみ” を選択させたい場面に向いています。チェックボタンの場合は単に ON / OFF を切り替えさせたい場面に向いています。

例えば、お絵描きアプリなどでペンで描画する線を “太線にする” という設定の 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 で指定した文字列がチェックボタンの右側のラベル部分に表示されます。

textに指定した文字列がラベル部分に表示される様子

チェックボタンをクリックすれば、チェックの ON /OFF が、つまり “左側の四角のチェックの有無” が交互に切り替わる様子が確認できると思います。

チェックボタンの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 オプションに指定したウィジェット変数とが連動するようになります。

ここで、これらがどのように連動するのかについて解説しておきます。

まず、上記で設定する onvalueoffvalue はそれぞれ下記を指定するオプションになります。

  • onvalue:チェックボタンが ON の時にウィジェット変数に設定される値
  • offvalue:チェックボタンが OFF の時にウィジェット変数に設定される値

さらに、上記のように設定することで、チェックボタンの ON / OFF を切り替えることで、variable オプションに指定したウィジェット変数に設定される値が切り替わるようになります。

より具体的には、チェックボタンの ON / OFF を切り替えることで variable オプションに指定したウィジェット変数に設定される値が下記のように切り替わるようになります。

  • ON :onvalue に指定した値
  • OFF:offvalue に指定した値

チェックボタンとウィジェット変数が連動する様子1

さらに、チェックボタンの「チェックの有無」という見た目が、variable オプションに指定したウィジェット変数に設定される値に応じて切り替わるようになります。

より具体的には、ウィジェット変数に設定される値に応じて下記のようにチェックボタンの見た目が切り替わります。

  • onvalue:チェックがある
  • onvalue 以外:チェックがない

チェックボタンとウィジェット変数が連動する様子2

ここまでをまとめると、下記のようにチェックボタンとウィジェット変数とが連動するようになります。

  • チェックボタンへのクリック時:
    • ウィジェット変数に設定される値が onvalueoffvalue とで切り替わる
  • ウィジェット変数に設定される値の変化時:
    • ウィジェット変数に設定されている値が onvalue になるとチェックが入る
    • ウィジェット変数に設定されている値が onvalue 以外になるとチェックが外れる

このようにチェックボタンとウィジェット変数が連動するため、「チェックボタンにチェックがある時」にはウィジェット変数には onvalue の値が、「チェックボタンにチェックがない時」にはウィジェット変数には offvalue の値が設定されていることになります。

MEMO

チェックを入れる・チェックを外すが GUI からの操作のみで切り替えられる場合で限定した時の話になります

ウィジェット変数に設定されている値をスクリプトから無理矢理変化させるような場合は、ウィジェット変数に設定されている値が onvalueoffvalue 以外になる場合があります

つまり、variable オプションに指定したウィジェット変数に設定されている値を取得し、その値が onvalueoffvalue のどちらであるかを判断することで、チェックボタンが ON / OFF のどちらの状態か(チェックの有無がどちらか)を判別することができます。

チェックボタンの ON / OFF の判別

ここまで解説してきたように、チェックボタンの ON / OFF はウィジェット変数に設定されている値を取得することで判別することが可能です。

ウィジェット変数に設定されている値を取得するためには、ウィジェット変数の get メソッドを実行します。

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()

スクリプトのベースは下記ページの最後に紹介しているお絵描きアプリです。

tkinter解説ページのアイキャッtPythonでTkinterを使ってめちゃくちゃ簡単にGUIアプリを作る

上記ページで紹介しているお絵描きアプリに対し、次の項目を設定するチェックボタンを追加しています。

  • ペンを太くする

スクリプトを実行すると下の図のような画面のアプリが起動します。

チェックボタンの利用例のスクリプト実行時に起動するアプリ

チェックボタンからチェックを外した状態で、マウスをクリックしながらキャンバス上を移動させると「細めのペン」でお絵描きすることができます。

チェックボタンOFFの時のペンの太さ

またチェックボタンにチェックを入れた状態で、マウスをクリックしながらキャンバス上を移動させると「太めのペン」でお絵描きすることができます。

チェックボタンONの時のペンの太さ

このような動作から、チェックボタンの ON / OFF によってアプリの動作が変化していることが確認できると思います。

ウィジェット変数の作成

では、スクリプトでどのような処理を行なっているのかについて解説していきたいと思います。

まずは前準備として下記でウィジェット変数を作成しています。

ウィジェット変数の作成
check_v = tkinter.BooleanVar(value=False)

この check_v がチェックボタンの variable に設定するウィジェット変数になります。

ウィジェット変数のコンストラクタに指定する value はウィジェット変数の設定値の初期値になります。

この value には後述で紹介するチェックボタンの offvalue オプションの値を設定するようにしています。なので、アプリ起動直後はチェックボタンのチェックは外れた状態になります。

ウィジェット変数の初期値がoffvalueと一致しているときのチェックボタンの状態

逆に、value にチェックボタンの onvalue オプションの値を指定した場合は、アプリ起動直後にチェックボタンのチェックが入った状態になります。

ウィジェット変数の初期値がonvalueと一致しているときのチェックボタンの状態

このように “アプリ起動直後のチェックボタンのチェックの有無” をウィジェット変数の設定値の初期値によって切り替えられるのは、ウィジェット変数と連動する様子で説明したように、ウィジェット変数の設定値が onvalue である場合のみチェックボタンのチェックが入るように “チェックボタンとウィジェット変数が連動する” ためです。

スポンサーリンク

チェックボタンウィジェットの作成

チェックボタンは前述の通り、Checkbutton クラスのコンストラクタを実行することで作成することができます。

チェックボタンを作成しているのが下記部分になります。

チェックボタンの作成
check = tkinter.Checkbutton(
	app,
	variable=check_v,
	onvalue=True,
	offvalue=False,
	text="太線にする"
)

他のウィジェット同様に作成するだけでは画面上に表示されませんので、作成後に配置を行う必要があります。このスクリプト例では pack メソッドで配置を行なっています。

上記で作成する check に対応するチェックボタンがアプリの UI 上における下の図のボタンになります。

ウィジェット変数の初期値がoffvalueと一致しているときのチェックボタンの状態

スポンサーリンク

ウィジェット変数との連動設定

さらに上記の Checkbutton クラスのコンストラクタを実行する際に、次のように onvalueoffvaluevariable を設定しています。

  • onvalueTrue
  • offvalueFalse
  • variablecheck_v

これにより、チェックボタン check とウィジェット変数 check_v とが連動するようになります。

より具体的には、チェックボタン check をクリックするたびに check_v に設定される値が onvalue に指定している値 Trueoffvalue に指定している値 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 で取得した値が  Trueonvalue に指定している値)の場合と、Falseoffvalue にしている値)の場合とで、描画する円の直径(単位はピクセル)となる px の値を切り替えるようにしています。

さらに、この px の値を用いてキャンバスに描画する円のサイズ(より正確には円の開始座標と円の座標)を create_oval メソッドに指定しています。この描画される円がお絵描きに用いるペンになります。

create_ovalに指定する円のサイズの説明図

pxget で取得した値が True の場合の方が大きな値になるようにしていますので、チェックボタンが ON の時にはペンが太くなるように動作することになります。

また、今回の例ではチェックの ON / OFF のみを示すため onvalue には Trueoffvalue には False を指定していますが、これらに設定値そのものを指定しても良いです。

例えば上記のスクリプトで言うと、onvalue にチェック ON 時のペンの太さである 30 を、offvalue にチェック OFF 時のペンの太さである 10 を指定しておけば、get メソッドで取得した数値をそのまま create_oval に指定すればよいようになります。

実際にこのように onvalueoffvalue を指定した場合のスクリプト例は下記のようになります(ウィジェット変数に整数を設定できるように BoolearVar クラスから IntVar クラスへ変更しています)。

onvalueとoffvalueの別の指定例
# -*- 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のラジオボタンの使い方の解説ページアイキャッチ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

invoketoggle メソッド同様にチェックボタンの ON / OFF を切り替え、さらに command に指定した関数・メソッドを実行するメソッドです。

要は invoke メソッドの実行により、マウスでチェックボタンをクリックした時と同じ動作をさせることができます。command に指定した関数・メソッドを実行したくない場合は、前述の toggle を利用します。

スポンサーリンク

select

select は実行したチェックボタンを ON にするメソッドです(チェックを入れるメソッド)。

チェックボタンが OFF の状態でこのメソッドを実行すれば、メソッドを実行したチェックボタンが ON になります。一方で ON の状態でメソッドを実行しても特に何も動作しません。

チェックボタンが ON の状態の時にメソッド実行により OFF にしたい場合は、前述の toggle メソッドを利用します。

deselect

deselectselect メソッドとは逆で、実行したチェックボタンを 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のラジオボタンの使い方の解説ページアイキャッチTkinterの使い方:ラジオボタン(Radiobutton)の使い方