【初心者必見!?】Tkinterで使われるcheckbuttonを徹底解説!?
今回はTkinterで使われるcheckbuttonに関して、徹底解説いたします。checkbuttonに関して知りたい、コードを通して理解を深めたい方へおすすめです。是非最後までご覧ください。
- そもそもTkinterで使われるcheckbuttonとは?
- 下準備
- Tkinterで活用されるcheckbutton Widgetの定義
- 【4種類】checkbutton Widgetで活用される関数
- ttk.Checkbutton()を利用してみる
- まとめ
- 参考文献
執筆者 - おすすめの記事3選
そもそもTkinterで使われるcheckbuttonとは?
Tkinterで使われるcheckbuttonとは、Widgetの一種で、選択するとレ点(チェックマーク)が付く、見た目が四角な部品を意味します。
Webやアプリの会員登録、お問い合わせなどに活用され、別名(checkbutton Widget, チェックボックス)と呼ばれます。
普段聞き慣れない言葉がいくつか出てきましたね。。以下の「Tkinterの構成要素」を確認しながら、理解を深めましょう。
Tkinterの構成要素
Tkinterの構成要素として、Window, Frame, Widgetの概念が存在します。
名称 | 説明文 |
---|---|
Window | 画像の青色枠の部分になります。Tkinter画面全体を表します。 |
Frame | 画像内の緑色枠部分になります。Widgetが1つ以上ある場合に、取りまとめるものです。 |
Widget | 黄色枠で囲まれる部分になります。1つの機能を持つ最小単位 = Widgetと考えると良いでしょう。 |
前の章でTkinterで活用されるcheckbuttonとは、Widgetの一種で、選択するとレ点(チェックマーク)が付く、見た目が四角な部品とお伝えしました。
「Tkinterの構成要素」の画像内では、黄色枠に該当するWidgetに対して、編集することになります。
Tkinterの構成要素を理解したところで、実際にcheckbuttonの活用方法を理解していきましょう。
下準備
今回は先ほど紹介した「Tkinterの構成要素」の画像を元に、checkbuttonの使い方をお伝えいたします。
下にコードを貼り付けておきますので、画像と見比べながら、コードを確認してみてください。できればコードに触れて、一緒にcheckbuttonを体験しましょう。
1import tkinter as tk
2
3class Application(tk.Frame):
4 # checkbutton Widget(チェックボックス)が選択された場合に実行する関数
5 def excecuteCheckButton(self):
6 print('Hello check button!!')
7
8 def __init__(self, master=None):
9 # Windowの初期設定を行う。
10 super().__init__(master)
11
12 # Windowの画面サイズを設定する。
13 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
14 self.master.geometry("300x200")
15
16 # Windowを親要素として、frame Widget(Frame)を作成する。
17 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
18 frame = tk.Frame(self.master)
19
20 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか?
21 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
22 frame.pack()
23
24 # frame Widget(Frame)を親要素として、checkbutton Widgetを作成する。
25 # command : checkbutton Widget(チェックボックス)が選択された場合に、実行する関数を設定する。self.excecuteCheckButtonとする。
26 # チェックボックスとは? : https://wa3.i-3-i.info/word18220.html
27 checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
28
29 # frame Widget(Frame)を親要素とした場合に、checkbutton Widgetをどのように配置するのか?
30 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
31 checkbutton.pack()
32
33# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
34if __name__ == "__main__":
35 # Windowを生成する。
36 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
37 root = tk.Tk()
38
39 app = Application(master=root)
40
41 # Windowをループさせて、継続的にWindow表示させる。
42 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
43 app.mainloop()
上記のコードをPython環境で実行すると、「Tkinterの構成要素」で紹介した画像の結果が表示されます。
Tkinterで活用されるcheckbutton Widgetの定義
checkbutton Widgetは、
1import tkinter as tk
2
3tk.Checkbutton(option1, option2, ...) or tk.Checkbutton('親要素', option1, option2, ...)
で定義されます。
checkbutton Widgetで活用されるoptionの種類としては
- variable
- activebackground, activeforeground
- text
- background, bg
- width, height
- anchor
- borderwidth, bd
- bitmap
- command
- cursor
- font
- fg, foreground
- image
- wraplength
- justify
- padx, pady
- indicatoron
- relief
- overrelief
- offrelief
- compound
- textvariable
- state
- disabledforeground
- onvalue, offvalue
があります。順番に見ていきましょう。
※ optionの種類一覧を調べたい場合は、以下のようにコードを記述してご確認ください。
1import tkinter as tk
2
3# checkbuttonを生成する。
4checkbutton = tk.Checkbutton()
5# checkbuttonに関するoptionの種類一覧を取得する。
6print(checkbutton.keys())
variable
variable optionを利用すると、現在のcheckbutton Widget(チェックボックス)の値を保存できます。
例えば下準備コードを、以下のように変更して、
1class Application(tk.Frame):
2+ # 現在のcheckbutton Widget(チェックボックス)の値を保存する変数を用意
3+ variable = None
4 def excecuteCheckButton(self):
5- print('Hello check button!!')
6+ # 現在のcheckbutton Widget(チェックボックス)の値を取得する。
7+ print(self.variable.get())
8
9 def __init__(self, master=None):
10 ...
11+ # 現在のcheckbutton Widget(チェックボックス)の値を保存する変数を、boolean型の変数とする。
12+ # BooleanVarについて : https://kuroro.blog/python/K53voPjJuKFfYrjmP8FP/
13+ self.variable = tk.BooleanVar()
14+ # self.variable変数の値を初期化する。
15+ self.variable.set(True)
16- checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
17+ # variable : 現在のcheckbutton Widget(チェックボックス)の値を保存する設定。Boolean変数(self.variable)として値を持たせることで、可変として扱い、常に最新のcheckbutton Widget(チェックボックス)の値を保存できるようにする。
18+ checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, variable=self.variable)
「checkbutton Widget(チェックボックス)」を選択すると、以下の画像のように現在のcheckbutton Widget(チェックボックス)の値を取得できます。
activebackground, activeforeground
activebackground option, activeforeground optionを利用すると、それぞれcheckbutton Widget(チェックボックス)を選択した時の背景色・文字列色を設定できます。
※ 2021年6月30日現在、筆者のMac OSではactivebackground option, activeforeground optionを指定しても、checkbuttion Widget(チェックボックス)を選択した時の背景色・文字列色は変更されませんでした。調べたところ、Mac OSには対応していない模様です。(参考)
text
text optionを利用すると、checkbutton Widget(チェックボックス)の横に文字列を設定できます。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A') or checkbutton.configure(command=self.excecuteCheckButton, text='Option A')
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A')
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
background, bg
background option, bg optionを利用すると、checkbutton Widget(チェックボックス)の背景色を設定できます。
backgroundとbg両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
色に関しては、Tkinterの色の使い方とは?活用例から色の一覧をまとめて紹介!?で総括していますので、詳しく知りたい方は是非ご確認ください。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A', background='red') or checkbutton.configure(command=self.excecuteCheckButton, text='Option A', background='red')
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', background='red')
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
width, height
width option, height optionを利用すると、それぞれcheckbutton Widget(チェックボックス)の幅、高さを設定できます。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A', background='red', width=10, height=10) or checkbutton.configure(command=self.excecuteCheckButton, text='Option A', background='red', width=10, height=10)
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', background='red', width=10, height=10)
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
anchor
anchor optionを利用すると、checkbutton Widget(チェックボックス)の横に表示される文字列を、どこに配置するかを決定できます。
指定できる値として
- tk.W : Westの略。checkbutton Widget(チェックボックス)の左の真ん中へ、文字列を配置する
- tk.N : Northの略。checkbutton Widget(チェックボックス)の上の真ん中へ、文字列を配置する
- tk.S : Southの略。checkbutton Widget(チェックボックス)の下の真ん中へ、文字列を配置する
- tk.E : Eastの略。checkbutton Widget(チェックボックス)の右の真ん中へ、文字列を配置する
- tk.NE : North Eastの略。checkbutton Widget(チェックボックス)の右上へ、文字列を配置する
- tk.NW : North Westの略。checkbutton Widget(チェックボックス)の左上へ、文字列を配置する
- tk.SW : South Westの略。checkbutton Widget(チェックボックス)の左下へ、文字列を配置する
- tk.SE : South Eastの略。checkbutton Widget(チェックボックス)の右下へ、文字列を配置する
- tk.CENTER : 中心の略。checkbutton Widget(チェックボックス)の中心へ、文字列を配置する
の9種類が存在します。デフォルトではtk.CENTER
が設定されます。
anchorに関する値入力へ悩んだ方は、以下の画像を確認しながら、anchorの値を考えると良いでしょう。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A', background='red', width=50, height=25, anchor=tk.NE) or checkbutton.configure(command=self.excecuteCheckButton, text='Option A', background='red', width=50, height=25, anchor=tk.NE)
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', background='red', width=50, height=25, anchor=tk.NE)
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
borderwidth, bd
borderwidth option, bd optionを利用すると、checkbutton Widget(チェックボックス)の枠の大きさを設定できます。
borderwidthとbd両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A', bd=20, background='red') or checkbutton.configure(command=self.excecuteCheckButton, text='Option A', bd=20, background='red')
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', bd=20, background='red')
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
bitmap
bitmap optionを利用すると、XBM形式の2値画像(白と黒のみで表現される画像)を、設定できます。
Tkinterでは標準でいくつかのXBM形式の2値画像を備えていて、
- error
- gray75
- gray50
- gray25
- gray12
- hourglass
- info
- questhead
- question
- warning
が存在します。上でリストされるXBM形式の2値画像の詳細を知りたい場合は、こちらのリンクを確認ください。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, bitmap="error") or checkbutton.configure(command=self.excecuteCheckButton, bitmap="error")
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, bitmap="error")
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
command
command optionを利用すると、checkbutton Widget(チェックボックス)を選択した時に実行する関数を設定できます。
例えば下準備で用意されるコードをPython環境で実行し、checkbutton Widget(チェックボックス)を選択すると、self.excecuteCheckButton関数が実行されて、以下の画像のように「Hello check button!!」のテキストが表示されます。
cursor
cursor optionを利用すると、checkbutton Widget(チェックボックス)内へマウスカーソルを移動すると矢印の見た目を変化できます。
見た目のバリエーションについてはこちらのサイトにまとまっていますので、ご確認ください。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更して
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, cursor="clock") or checkbutton.configure(command=self.excecuteCheckButton, cursor="clock")
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, cursor="clock")
checkbutton Widget(チェックボックス)内へマウスカーソルを移動すると、矢印の見た目が変更します。
font
font optionを利用すると、checkbutton Widget(チェックボックス)の横の文字列の形式や大きさを変更できます。
fontに関しては、Tkinterで使われるフォントって?2種類のフォントの設定方法を丁寧に解説でまとめておりますので、詳しく知りたい方は是非ご確認ください。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, font=("", 20, "underline"), text='Option A') or checkbutton.configure(command=self.excecuteCheckButton, font=("", 20, "underline"), text='Option A')
4##################################
5# fontについて : https://kuroro.blog/python/RZNjLl36upkumxwkTRWl/
6checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, font=("", 20, "underline"), text='Option A')
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
fg, foreground
fg option, foreground optionを利用すると、checkbutton Widget(チェックボックス)の横の文字列色を変更できます。
fgとforeground両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A', fg='red') or checkbutton.configure(command=self.excecuteCheckButton, text='Option A', fg='red')
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', fg='red')
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
image
image optionを利用すると、checkbutton Widget(チェックボックス)の横へ、画像を貼り付ける設定ができます。
例えば下準備コードを、以下のように変更すると、
1+ # 画像について : https://kuroro.blog/python/Z7k1LSyDyiDHtD5UCjmG/
2+ global image
3+ image = tk.PhotoImage(file="/{画像のパス}/{画像ファイル名}.{拡張子}")
4- checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
5+ checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, background='red', image=image)
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
画像の取り扱いに関しては、【もう間違えない!?】PythonのTkinterを用いて画像を表示する方法でまとめましたので、うまく画像が表示されない、サンプルコードを確認したい方はご確認ください。
wraplength
wraplength optionを利用すると、checkbutton Widget(チェックボックス)の横で利用する、文字列の折り返し幅を設定できます。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, wraplength=50, text='aiueoaiueoaiueoaiueoaiueoaiueoaiueoaiueo') or checkbutton.configure(command=self.excecuteCheckButton, wraplength=50, text='aiueoaiueoaiueoaiueoaiueoaiueoaiueoaiueo')
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, wraplength=50, text='aiueoaiueoaiueoaiueoaiueoaiueoaiueoaiueo')
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
justify
justify optionを利用すると、checkbutton Widget(チェックボックス)の横で利用する、文字列をどちらに揃えるか設定できます。
指定できる値としては、
- tk.LEFT : 左寄せ
- tk.CENTER : 中央寄せ(デフォルト)
- tk.RIGHT : 右寄せ
の3種類があります。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, wraplength=50, text='aiueokakikukekosashisusesotachitsuteto', justify=tk.RIGHT) or checkbutton.configure(command=self.excecuteCheckButton, wraplength=50, text='aiueokakikukekosashisusesotachitsuteto', justify=tk.RIGHT)
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, wraplength=50, text='aiueokakikukekosashisusesotachitsuteto', justify=tk.RIGHT)
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
padx, pady
padx option, pady optionを利用すると、checkbutton Widget(チェックボックス)の横の文字列の、外側へ空白の幅を設定できます。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A', padx=40, pady=50) or checkbutton.configure(command=self.excecuteCheckButton, text='Option A', padx=40, pady=50)
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', padx=40, pady=50)
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
indicatoron
indicatoron optionを利用すると、選択する✅ボタンの表示・非表示の設定ができます。True(デフォルト)の場合、✅ボタンを表示、Falseの場合に、✅ボタンを非表示にします。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A', indicatoron=False) or checkbutton.configure(command=self.excecuteCheckButton, text='Option A', indicatoron=False)
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', indicatoron=False)
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
relief
relief optionを利用すると、checkbutton Widget(チェックボックス)の枠のデザインを設定できます。
指定できる値としては、
- tk.RAISED
- tk.SUNKEN
- tk.FLAT
- tk.RIDGE
- tk.GROOVE
- tk.SOLID
の6種類があります。
※ 2021年6月30日現在、筆者のMac OSではrelief optionを指定しても、checkbutton Widget(チェックボックス)の枠のデザインは変更されませんでした。調べたところ、Mac OSには対応していない模様です。(参考)
overrelief
overrelief optionを利用すると、マウスカーソルをcheckbutton Widget(チェックボックス)へ移した際の、枠のデザインを設定できます。
指定できる値としては、
- tk.RAISED
- tk.SUNKEN
- tk.FLAT
- tk.RIDGE
- tk.GROOVE
- tk.SOLID
の6種類があります。
※ 2021年6月30日現在、筆者のMac OSではoverrelief optionを指定しても、マウスカーソルをcheckbutton Widget(チェックボックス)へ移した際の、枠のデザインは変更されませんでした。調べたところ、Mac OSには対応していない模様です。(参考)
offrelief
offrelief optionを利用すると、indicatoron optionの値をFalseとして、checkbutton Widget(チェックボックス)が選択されていない時の枠のデザインを設定できます。
指定できる値としては、
- tk.RAISED
- tk.SUNKEN
- tk.FLAT
- tk.RIDGE
- tk.GROOVE
- tk.SOLID
の6種類があります。
※ 2021年6月30日現在、筆者のMac OSではoffrelief optionを指定しても、indicatoron optionの値をFalseとして、checkbutton Widget(チェックボックス)が選択されていない時の枠のデザインは変更されませんでした。調べたところ、Mac OSには対応していない模様です。(参考)
compound
compound optionを利用すると、checkbutton Widget(チェックボックス)の横へ画像を貼り付ける場合に、文字列をどこに配置するのか設定できます。
指定できる値として
- tk.LEFT : 文字列の左側へ画像を配置する
- tk.RIGHT : 文字列の右側へ画像を配置する
- tk.BOTTOM : 文字列の下側へ画像を配置する
- tk.TOP : 文字列の上側へ画像を配置する
- tk.CENTER : 画像の真ん中へ文字列を配置する
- tk.NONE : 文字列を表示しない(デフォルト)
の6種類が存在します。
例えば下準備コードを、以下のように変更すると、
1+ # 画像について : https://kuroro.blog/python/Z7k1LSyDyiDHtD5UCjmG/
2+ global image
3+ image = tk.PhotoImage(file="/{画像のパス}/{画像ファイル名}.{拡張子}")
4- checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
5+ checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', image=image, compound=tk.LEFT)
以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
textvariable
textvariable optionを利用すると、checkbutton Widget(チェックボックス)の横で利用する、文字列を可変に扱うことが可能になります。
例えば下準備コードを、以下のように変更すると、
1class Application(tk.Frame):
2+ # 文字列情報を保存する変数を用意
3+ textvariable = None
4 def excecuteCheckButton(self):
5 print('Hello check button!!')
6+ # checkbutton Widget(チェックボックス)の横の文字列情報を更新する。
7+ self.textvariable.set("ボタンがクリックされました。")
8
9 def __init__(self, master=None):
10 ...
11+ # 文字列情報を保存する変数をstring型の変数とする。
12+ # StringVarについて : https://kuroro.blog/python/K53voPjJuKFfYrjmP8FP/
13+ self.textvariable = tk.StringVar()
14+ # self.textvariable変数の値を初期化する。
15+ self.textvariable.set('クリックしてください')
16- checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
17+ # textvariable : checkbutton Widget(チェックボックス)の横へ文字列を表示する。値を可変なself.textvariableとする。
18+ checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, textvariable=self.textvariable)
始めに、以下の画像のようにcheckbutton Widget(チェックボックス)を描画して、
「クリックしてください」を選択すると、以下の画像のようにcheckbutton Widget(チェックボックス)を描画します。
StringVar()に関しては、Tkinterで使われるWidget変数とは?StringVarを中心に解説!?でまとめていますので、詳しく知りたい方は是非ご確認ください。
state
state optionを利用すると、checkbutton Widget(チェックボックス)の状態を設定できます。
指定できる値としては、
- normal : checkbutton Widget(チェックボックス)への選択を有効。マウスカーソルがcheckbutton Widget(チェックボックス)上に乗っていない状態を表す。デフォルト。
- disabled : checkbutton Widget(チェックボックス)への選択を無効。
- active : checkbutton Widget(チェックボックス)への選択を有効。マウスカーソルがcheckbutton Widget(チェックボックス)上に乗っている状態を表す。
があります。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, state='disabled', text='Option A') or checkbutton.configure(command=self.excecuteCheckButton, state='disabled', text='Option A')
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, state='disabled', text='Option A')
以下の画像のようにcheckbutton Widget(チェックボックス)が選択できなくなります。
disabledforeground
disabledforeground optionを利用すると、checkbutton Widget(チェックボックス)の状態(state)がdisabledの時の、文字列色を設定できます。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, state='disabled', disabledforeground='red', text='Option A') or checkbutton.configure(command=self.excecuteCheckButton, state='disabled', disabledforeground='red', text='Option A')
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, state='disabled', disabledforeground='red', text='Option A')
以下の画像のようにcheckbutton Widge(チェックボックス)を描画します。
onvalue, offvalue
onvalue option, offvalue optionを利用すると、それぞれcheckbutton Widget(チェックボックス)がチェック(入力)状態の値、checkbutton Widget(チェックボックス)がクリア(選択中を解除)状態の値を変更できます。
onvalue optionは、デフォルトで(1・ON・YES・TRUE)が格納され、offvalue optionはデフォルトで(0・OFF・NO・FALSE)が格納されます。
例えば下準備コードのcheckbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# checkbutton = tk.Checkbutton(frame)
3# checkbutton.config(command=self.excecuteCheckButton, text='Option A', onvalue='hoge') or checkbutton.configure(command=self.excecuteCheckButton, text='Option A', onvalue='hoge')
4##################################
5checkbutton = tk.Checkbutton(frame, command=self.excecuteCheckButton, text='Option A', onvalue='hoge')
checkbutton Widget(チェックボックス)が、チェック(入力)状態になった場合の値を、hogeと返すように変更されます。
【4種類】checkbutton Widgetで活用される関数
checkbutton Widget(チェックボックス)で活用される関数として、
- select
- deselect
- invoke
- toggle
の4種類が存在します。順に見ていきましょう。
select
select関数を利用すると、checkbutton Widget(チェックボックス)をチェック(入力)状態にします。
1.select()
で定義されます。戻り値はありません。
例えば下準備コードのcheckbutton.pack()
の下へ、以下のコードを追加すると、
1 checkbutton.pack()
2+ checkbutton.select()
以下の画像のようにcheckbutton Widget(チェックボックス)をチェック(入力)状態にします。
deselect
deselect関数を利用すると、checkbutton Widget(チェックボックス)をクリア(選択中を解除)します。
1.deselect()
で定義されます。戻り値はありません。
例えば下準備コードのcheckbutton.pack()
の下へ、以下のコードを追加すると
1 checkbutton.pack()
2+ checkbutton.select()
3+ checkbutton.deselect()
以下の画像のように、checkbutton Widget(チェックボックス)をクリア(選択中を解除)します。
invoke
invoke関数を利用すると、checkbutton Widget(チェックボックス)がチェック(入力)状態の場合にクリア(選択中を解除)して、checkbutton Widget(チェックボックス)がクリア(選択中を解除)されている場合にチェック(入力)状態にします。加えてcommand optionで設定される関数を実行します。
1.invoke()
で定義されます。戻り値はありません。
例えば下準備コードのcheckbutton.pack()
の下へ、以下のコードを追加すると
1 checkbutton.pack()
2+ checkbutton.invoke()
以下の画像のように、checkbutton Widget(チェックボタン)をチェック(入力)状態にして、command関数が実行されます。
toggle
toggle関数を利用すると、checkbutton Widget(チェックボックス)がチェック(入力)状態の場合にクリア(選択中を解除)して、checkbutton Widget(チェックボックス)がクリア(選択中を解除)されている場合にチェック(入力)状態にできます。
1.toggle()
で定義されます。戻り値はありません。
例えば下準備コードのcheckbutton.pack()
の下へ、以下のコードを追加すると
1 checkbutton.pack()
2+ checkbutton.toggle()
以下の画像のように、checkbutton Widget(チェックボックス)をチェック(入力)状態にします。
ttk.Checkbutton()を利用してみる
ttk.Checkbutton()とは、テーマ(名前)を指定して、外観を変更するcheckbutton Widget(チェックボックス)を意味します。
checkbutton Widget(チェックボックス)の拡張と考えるとよいでしょう。Tkinterのversion 8.5で導入されました。
ttk.Checkbutton()を利用するためには、tkinterからttkをimportする必要があります。
1# tkinterからttkをimportする
2from tkinter import ttk
tk.Checkbutton()との違いとしては、
- 使用できるoptionに違いがある
- テーマ(名前)を利用して、checkbutton Widget(チェックボックス)の外観を変更する
- 「【4種類】checkbutton Widgetで活用される関数」の一部が使えない
があります。順に見ていきましょう。
使用できるoptionに違いがある
こちらはコードの結果を確認するとわかります。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2from tkinter import ttk
3
4class Application(tk.Frame):
5
6 def __init__(self, master=None):
7 # Windowの初期設定を行う。
8 super().__init__(master)
9
10 # Windowの画面サイズを設定する。
11 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
12 self.master.geometry("300x200")
13
14 # Windowを親要素として、frame Widget(Frame)を作成する。
15 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
16 frame = tk.Frame(self.master)
17
18 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか?
19 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
20 frame.pack()
21
22 # frame Widget(Frame)を親要素として、ttk checkbutton Widgetを作成する。
23 ttkCheckbutton = ttk.Checkbutton(frame)
24 print('ttk.Checkbutton option : ')
25 # ttk.Checkbutton()のoption一覧を表示する。
26 print(ttkCheckbutton.keys())
27
28 # frame Widget(Frame)を親要素として、checkbutton Widgetを作成する。
29 checkbutton = tk.Checkbutton(frame)
30 print('tk.Checkbutton option : ')
31 # tk.Checkbutton()のoption一覧を表示する。
32 print(checkbutton.keys())
33
34# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
35if __name__ == "__main__":
36 # Windowを生成する。
37 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
38 root = tk.Tk()
39
40 app = Application(master=root)
41
42 # Windowをループさせて、継続的にWindow表示させる。
43 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
44 app.mainloop()
以下の画像のように、optionの種類に差分が発生します。
テーマ(名前)を利用して、checkbutton Widget(チェックボックス)の外観を変更
ttk.Checkbutton()では、テーマ(名前)を指定することで、checkbutton Widget(チェックボックス)の外観を変更できます。
例えば以下のようなコードを作成すると、
1import tkinter as tk
2from tkinter import ttk
3
4class Application(tk.Frame):
5
6 def __init__(self, master=None):
7 # Windowの初期設定を行う。
8 super().__init__(master)
9
10 # Windowの画面サイズを設定する。
11 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
12 self.master.geometry("300x200")
13
14 # Windowを親要素として、frame Widget(Frame)を作成する。
15 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
16 frame = tk.Frame(self.master)
17
18 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか?
19 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
20 frame.pack()
21
22 # ttk.Checkbutton()の外観を変更
23 style = ttk.Style()
24 # テーマ(名前)の指定を行う。
25 style.theme_use('classic')
26
27 # frame Widget(Frame)を親要素として、ttk checkbutton Widgetを作成する。
28 ttkCheckbutton = ttk.Checkbutton(frame)
29
30 # frame Widget(Frame)を親要素として、checkbutton Widgetを作成する。
31 checkbutton = tk.Checkbutton(frame)
32
33 # frame Widget(Frame)を親要素とした場合に、ttk checkbutton Widgetをどのように配置するのか?
34 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
35 ttkCheckbutton.pack()
36
37 # frame Widget(Frame)を親要素とした場合に、checkbutton Widgetをどのように配置するのか?
38 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
39 checkbutton.pack()
40
41# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
42if __name__ == "__main__":
43 # Windowを生成する。
44 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
45 root = tk.Tk()
46
47 app = Application(master=root)
48
49 # Windowをループさせて、継続的にWindow表示させる。
50 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
51 app.mainloop()
以下の画像のように、checkbutton Widget(チェックボックス)を描画します。
また現在利用中のテーマ(名前)を確認する場合は、
1from tkinter import ttk
2
3style = ttk.Style()
4# 現在利用中のテーマ(名前)を確認
5currentTheme = style.theme_use()
6print(currentTheme)
利用できるテーマ(名前)の一覧を確認する場合は、
1from tkinter import ttk
2
3style = ttk.Style()
4# テーマ(名前)の一覧を確認
5allTheme = style.theme_names()
6print(allTheme)
テーマ(名前)の指定を行う場合は、
1from tkinter import ttk
2
3style = ttk.Style()
4# テーマ(名前)の指定を行う。
5style.theme_use('テーマ(名前)')
をご利用ください。
「【4種類】checkbutton Widgetで活用される関数」の一部が使えない
ttk.Checkbutton()では、「【4種類】checkbutton Widgetで活用される関数」で紹介しました、select, deselect, toggle関数が使えなくなります。(invoke関数は利用できます。)
checkbutton Widget(チェックボックス)の値を更新したり、取得する場合は、variable optionとset(), get()関数をご利用ください。
variable optionとset(), get()関数の利用方法に関しては、「Tkinterで活用されるcheckbutton Widgetの定義」の、variable箇所でまとめておりますので、ご確認ください。
まとめ
- Tkinterは、Window, Frame, Widgetで構成される。
- Tkinterで利用されるcheckbuttonとは、Widgetの一種で、選択するとレ点(チェックマーク)が付く、見た目が四角な部品を意味します。
- 別名checkbutton Widget, チェックボックスと呼ばれます。
参考文献
- Tkinterのcheckbuttonに関するサンプルコード
- レ点(チェックマーク)とは?
- チェックボックスとは?
- XBMとは?
- マウスカーソルとは?
- Tkinterで使われるマウスカーソルの種類
- 文字列の折り返しとは?
- テーマとは?