Tkinterで使われるradiobuttonとは?活用方法から実用例を徹底解説
今回はTkinterで使われるradiobuttonの活用方法から実用例を解説いたします。radiobuttonに関して知りたい、実用例を通して見識を深めたい方へおすすめです。是非最後までご一読ください。
- そもそもTkinterで使われるradiobuttonとは?
- 下準備
- Tkinterで活用されるradiobutton Widgetの定義
- radiobuttonで活用される5種類の関数
- ttk.Radiobutton()を利用してみる
- まとめ
- 参考文献
執筆者 - おすすめの記事3選
そもそもTkinterで使われるradiobuttonとは?
Tkinterで使われるradiobuttonとは、Widgetの一種で、複数の選択肢の中から、1つを選ぶときに使われる入力フォーム を意味します。
別名radiobutton Widgetと呼ばれます。
わかりにくい言葉がいくつか出てきましたね。。以下の「Tkinterの構成要素」を確認しながら、理解を深めましょう。
Tkinterの構成要素
Tkinterの構成要素として、Window, Frame, Widgetの概念が存在します。
名称 | 説明文 |
---|---|
Window | 画像の青色枠の部分になります。Tkinter画面全体を表します。 |
Frame | 画像内の黄緑色枠の部分になります。Widgetが1つ以上ある場合に、取りまとめるものです。 |
Widget | オレンジ色枠で囲まれる部分になります。1つの機能を持つ最小単位 = Widgetと考えると良いでしょう。 |
前の章でTkinterで活用されるradiobuttonとは、Widgetの一種で、複数の選択肢の中から、1つを選ぶときに使われる入力フォームとお伝えしました。
「Tkinterの構成要素」の画像内では、オレンジ色枠に該当するWidgetに対して、編集することになります。
Tkinterの構成要素を理解したところで、実際にradiobuttonの活用方法を理解していきましょう。
下準備
今回は先ほど紹介した「Tkinterの構成要素」の画像を元に、radiobuttonの使い方をお伝えします。
下にコードを貼り付けておきますので、画像と見比べながら、コードを確認してみてください。できればコードに触れて、一緒にradiobuttonを実装しましょう。
1import tkinter as tk
2
3class Application(tk.Frame):
4 # 現在選択されているラジオボタンの値を格納する変数
5 variable = None
6
7 # 現在選択されているラジオボタンの値を確認する関数
8 def showValue(self):
9 # get() : 現在選択されているラジオボタンの値を取得する関数
10 print("You selected the option " + self.variable.get())
11
12 def __init__(self, master=None):
13 # Windowの初期設定を行う。
14 super().__init__(master)
15
16 # Windowの画面サイズを設定する。
17 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
18 self.master.geometry("300x200")
19
20 # Windowを親要素として、frame Widget(Frame)を作成する。
21 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
22 frame = tk.Frame(self.master)
23
24 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか?
25 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
26 frame.pack()
27
28 # 現在選択されているラジオボタンの値を文字列変数として扱う。
29 # StringVarについて : https://kuroro.blog/python/K53voPjJuKFfYrjmP8FP/
30 self.variable = tk.StringVar()
31 # set() : 初期値としてBの値を設定する。
32 self.variable.set('B')
33
34 # frame Widget(Frame)を親要素として、Aのradiobutton Widgetを作成する。
35 # variable : 現在選択中のラジオボタンの値を設定。文字列変数(self.variable)として値を持たせることで、可変として扱い、その他のラジオボタンへ値を共有して選択の状態を管理できる。
36 # value : ラジオボタン自身が持つ値の設定。Aとする。
37 # text : ラジオボタンを説明するテキスト。Option Aとする。
38 # command : ラジオボタンが選択された場合に実行する関数を設定する。self.showValue関数を設定する。
39 self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
40
41 # frame Widget(Frame)を親要素とした場合に、Aのradiobutton Widgetをどのように配置するのか?
42 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
43 self.aButton.pack()
44
45 # frame Widget(Frame)を親要素として、Bのradiobutton Widgetを作成する。
46 # variable : 現在選択中のラジオボタンの値を設定。文字列変数(self.variable)として値を持たせることで、可変として扱い、その他のラジオボタンへ値を共有して選択の状態を管理できる。
47 # value : ラジオボタン自身が持つ値の設定。Bとする。
48 # text : ラジオボタンを説明するテキスト。Option Bとする。
49 # command : ラジオボタンが選択された場合に実行する関数を設定する。self.showValue関数を設定する。
50 self.bButton = tk.Radiobutton(frame, variable=self.variable, value='B', text='Option B', command=self.showValue)
51
52 # frame Widget(Frame)を親要素とした場合に、Bのradiobutton Widgetをどのように配置するのか?
53 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
54 self.bButton.pack()
55
56 # frame Widget(Frame)を親要素として、Cのradiobutton Widgetを作成する。
57 # variable : 現在選択中のラジオボタンの値を設定。文字列変数(self.variable)として値を持たせることで、可変として扱い、その他のラジオボタンへ値を共有して選択の状態を管理できる。
58 # value : ラジオボタン自身が持つ値の設定。Cとする。
59 # text : ラジオボタンを説明するテキスト。Option Cとする。
60 # command : ラジオボタンが選択された場合に実行する関数を設定する。self.showValue関数を設定する。
61 self.cButton = tk.Radiobutton(frame, variable=self.variable, value='C', text='Option C', command=self.showValue)
62
63 # frame Widget(Frame)を親要素とした場合に、Cのradiobutton Widgetをどのように配置するのか?
64 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
65 self.cButton.pack()
66
67 # frame Widget(Frame)を親要素として、Dのradiobutton Widgetを作成する。
68 # variable : 現在選択中のラジオボタンの値を設定。文字列変数(self.variable)として値を持たせることで、可変として扱い、その他のラジオボタンへ値を共有して選択の状態を管理できる。
69 # value : ラジオボタン自身が持つ値の設定。Cとする。
70 # text : ラジオボタンを説明するテキスト。Option Dとする。
71 # command : ラジオボタンが選択された場合に実行する関数を設定する。self.showValue関数を設定する。
72 self.dButton = tk.Radiobutton(frame, variable=self.variable, value='C', text='Option D', command=self.showValue)
73
74 # frame Widget(Frame)を親要素とした場合に、Dのradiobutton Widgetをどのように配置するのか?
75 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
76 self.dButton.pack()
77
78# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
79if __name__ == "__main__":
80 # Windowを生成する。
81 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
82 root = tk.Tk()
83 app = Application(master=root)
84 # Windowをループさせて、継続的にWindow表示させる。
85 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
86 app.mainloop()
上記のコードをPython環境で実行すると、「Tkinterの構成要素」で紹介した画像の結果が表示されます。
Tkinterで活用されるradiobutton Widgetの定義
radiobutton Widgetは、
1tk.Radiobutton(option1, option2, ...) or tk.Radiobutton('親要素', option1, option2, ...)
で定義されます。
radiobutton Widgetで使われるoptionの種類としては
- activebackground, activeforeground
- width, height
- background, bg
- anchor
- borderwidth, bd
- bitmap
- command
- cursor
- font
- fg, foreground
- image
- wraplength
- justify
- padx, pady
- text
- value
- indicatoron
- relief
- overrelief
- offrelief
- compound
- variable
- textvariable
- state
- disabledforeground
があります。順番に見ていきましょう。
※ optionの種類一覧を調べたい場合は、以下のようにコードを記述してご確認ください。
1import tkinter as tk
2
3# radiobuttonを生成する。
4radiobutton = tk.Radiobutton()
5# radiobuttonに関するoptionの種類一覧を取得する。
6print(radiobutton.keys())
activebackground, activeforeground
activebackground option, activeforeground optionを利用すると、それぞれradiobutton Widgetを選択した時の背景色・文字列色を設定できます。
※ 2021年6月20日現在、筆者のMac OSではactivebackground option, activeforeground optionを指定しても、radiobuttion Widgetを選択した時の背景色・文字列色は変更されませんでした。調べたところ、Mac OSには対応していない模様です。(参考)
代わりにtkmacosxを活用すると、radiobuttion Widgetを選択した時の背景色・文字列色を変更できます。(tkmacosxのインストールとドキュメント)
width, height
width option, height optionを利用すると、それぞれradiobutton Widgetの幅、高さを設定できます。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, width=10, height=10) or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, width=10, height=10)
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, width=10, height=10)
以下の画像のようにradiobutton Widgetを描画します。
background, bg
background option, bg optionを利用すると、radiobutton Widgetの背景色を設定します。
backgroundとbg両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
色に関しては、Tkinterの色の使い方とは?活用例から色の一覧をまとめて紹介!?で総括していますので、詳しく知りたい方は是非ご確認ください。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, background='red') or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, background='red')
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, background='red')
以下の画像のようにradiobutton Widgetを描画します。
anchor
anchor optionを利用すると、radiobutton Widgetで表示する文字列を、どこに配置するかを決定できます。
指定方法として
- tk.W : Westの略。左の真ん中へradiobutton Widgetの文字列を配置する。
- tk.N : Northの略。上の真ん中へradiobutton Widgetの文字列を配置する。
- tk.S : Southの略。下の真ん中へradiobutton Widgetの文字列を配置する。
- tk.E : Eastの略。右の真ん中へradiobutton Widgetの文字列を配置する。
- tk.NE : North Eastの略。右上にradiobutton Widgetの文字列を配置する。
- tk.NW : North Westの略。左上にradiobutton Widgetの文字列を配置する。
- tk.SW : South Westの略。左下にradiobutton Widgetの文字列を配置する。
- tk.SE : South Eastの略。右下にradiobutton Widgetの文字列を配置する。
- tk.CENTER : 中心の略。中心へradiobutton Widgetの文字列を配置する。
の9種類が存在します。デフォルトではtk.CENTER
が設定されます。
anchorに関する値入力へ悩んだ方は、以下の画像を確認しながら、anchorの値を考えると良いでしょう。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, width=30, height=10, background='red', anchor=tk.E) or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, width=30, height=10, background='red', anchor=tk.E)
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, width=30, height=10, background='red', anchor=tk.E)
以下の画像のようにradiobutton Widgetを描画します。
borderwidth, bd
borderwidth option, bd optionを利用すると、radiobutton Widgetの枠の大きさを設定します。
borderwidthとbd両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, bd=20) or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, bd=20)
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, bd=20)
以下の画像のようにradiobutton Widgetを描画します。
bitmap
bitmap optionを利用すると、XBM形式の2値画像(白と黒のみで表現される画像)を、設定できます。
Tkinterでは標準でいくつかのbitmap画像を備えていて、
- error
- gray75
- gray50
- gray25
- gray12
- hourglass
- info
- questhead
- question
- warning
が存在します。上でリストされるbitmap画像の詳細を知りたい場合は、こちらのリンクを確認ください。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, bitmap="error") or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, bitmap="error")
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, bitmap="error")
以下の画像のようにradiobutton Widgetを描画します。
command
command optionを利用すると、ラジオボタンをクリックした時に実行する関数を設定できます。
例えば「Option Aのラジオボタン」をクリックすると、self.showValue関数が実行されて、以下の画像のように「You selected the option A」のテキストが表示されます。
cursor
cursor optionを利用すると、radiobutton Widget内へマウスカーソルを移動すると矢印の見た目を変化できます。
見た目のバリエーションについてはこちらのサイトにまとまっていますので、ご確認ください。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更して、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, cursor="clock") or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, cursor="clock")
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, cursor="clock")
radiobutton Widget内へマウスカーソルを移動すると、矢印の見た目が変更します。
font
font optionを利用すると、文字の形式や大きさを変更できます。
fontに関しては、Tkinterで使われるフォントって?2種類のフォントの設定方法を丁寧に解説でまとめておりますので、詳しく知りたい方は是非ご確認ください。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, font=("", 20, "underline")) or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, font=("", 20, "underline"))
4##################################
5# fontについて : https://kuroro.blog/python/RZNjLl36upkumxwkTRWl/
6self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, font=("", 20, "underline"))
以下の画像のようにradiobutton Widgetを描画します。
fg, foreground
fg option, foreground optionを利用すると、文字列色を変更できます。
fgとforeground両方のoptionを用いて、値を設定した場合、後ろの引数に設定されるoptionが優先されます。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, foreground="green") or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, foreground="green")
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, foreground="green")
以下の画像のようにradiobutton Widgetを描画します。
image
image optionを利用すると、radiobutton Widgetへ画像を貼り付ける設定を行います。
例えば下準備コードを、以下のように変更すると、
1+ # 画像について : https://kuroro.blog/python/Z7k1LSyDyiDHtD5UCjmG/
2+ global image
3+ image = tk.PhotoImage(file="/{画像のパス}/{画像ファイル名}.{拡張子}")
4- self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
5+ self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, image=image)
以下の画像のようにradiobutton Widgetを描画します。
画像の取り扱いに関しては、【もう間違えない!?】PythonのTkinterを用いて画像を表示する方法でまとめましたので、うまく表示されない、サンプルコードを確認したい方はご確認ください。
wraplength
wraplength optionを利用すると、radiobutton Widgetで利用する文字列の折り返し幅を設定できます。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option AOption AOption AOption AOption A', command=self.showValue, wraplength=50) or self.aButton.configure(variable=self.variable, value='A', text='Option AOption AOption AOption AOption A', command=self.showValue, wraplength=50)
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option AOption AOption AOption AOption A', command=self.showValue, wraplength=50)
以下の画像のようにradiobutton Widgetを描画します。
justify
justify optionを利用すると、radiobutton Widgetで利用する文字列をどちらに揃えるか設定できます。
指定方法としては、
- tk.LEFT : 左寄せ
- tk.CENTER : 中央寄せ(デフォルト)
- tk.RIGHT : 右寄せ
の3種類があります。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option AOption AOption AOption AOption A', command=self.showValue, wraplength=50, justify=tk.RIGHT) or self.aButton.configure(variable=self.variable, value='A', text='Option AOption AOption AOption AOption A', command=self.showValue, wraplength=50, justify=tk.RIGHT)
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option AOption AOption AOption AOption A', command=self.showValue, wraplength=50, justify=tk.RIGHT)
以下の画像のようにradiobutton Widgetを描画します。
padx, pady
padx option, pady optionを利用すると、文字列の外側へ空白の幅を設定できます。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, padx=20, pady=30) or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, padx=20, pady=30)
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, padx=20, pady=30)
以下の画像のようにradiobutton Widgetを描画します。
text
text optionを利用すると、radiobutton Widgetで利用する文字列を設定できます。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='testtest', command=self.showValue) or self.aButton.configure(variable=self.variable, value='A', text='testtest', command=self.showValue)
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='testtest', command=self.showValue)
以下の画像のようにradiobutton Widgetを描画します。
value
value optionを利用すると、radiobutton Widget自身の値を変更できます。
例えば下準備コードのself.cButton = tk.Radiobutton(frame, variable=self.variable, value='C', text='Option C', command=self.showValue)
箇所を、以下のように変更して、
1# 別解法 ##########################
2# self.cButton = tk.Radiobutton(frame)
3# self.cButton.config(variable=self.variable, value='A', text='Option C', command=self.showValue) or self.cButton.configure(variable=self.variable, value='A', text='Option C', command=self.showValue)
4##################################
5self.cButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option C', command=self.showValue)
「Option Cのラジオボタン」をクリックすると、以下の画像のように「Option Aのラジオボタン」も選択されるようになります。
indicatoron
indicatoron optionを利用すると、選択する◉ボタンの表示・非表示の設定ができます。True(デフォルト)の場合、◉ボタンを表示、Falseの場合に、◉ボタンを非表示にします。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, indicatoron=False) or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, indicatoron=False)
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, indicatoron=False)
以下の画像のようにradiobutton Widgetを描画します。
relief
relief optionを利用すると、radiobutton Widgetの枠のデザインを設定できます。
指定方法としては、
- tk.RAISED
- tk.SUNKEN
- tk.FLAT
- tk.RIDGE
- tk.GROOVE
- tk.SOLID
の6種類があります。
※ 2021年6月20日現在、筆者のMac OSではrelief optionを指定しても、radiobutton Widgetの枠のデザインは変更されませんでした。調べたところ、Mac OSには対応していない模様です。(参考)
overrelief
overrelief optionを利用すると、カーソルをradiobutton Widgetへ移した際の、枠のデザインを設定できます。
指定方法としては、
- tk.RAISED
- tk.SUNKEN
- tk.FLAT
- tk.RIDGE
- tk.GROOVE
- tk.SOLID
の6種類があります。
※ 2021年6月20日現在、筆者のMac OSではoverrelief optionを指定しても、カーソルをradiobutton Widgetへ移した際の、枠のデザインは変更されませんでした。調べたところ、Mac OSには対応していない模様です。(参考)
offrelief
offrelief optionを利用すると、indicatoron optionの値をFalseとして、radiobutton Widgetが選択されていない時の枠のデザインを設定できます。
指定方法としては、
- tk.RAISED
- tk.SUNKEN
- tk.FLAT
- tk.RIDGE
- tk.GROOVE
- tk.SOLID
の6種類があります。
※ 2021年6月20日現在、筆者のMac OSではoffrelief optionを指定しても、indicatoron optionの値をFalseとして、radiobutton Widgetが選択されていない時の枠のデザインは変更されませんでした。調べたところ、Mac OSには対応していない模様です。(参考)
compound
compound optionを利用すると、radiobutton 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- self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
5+ self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, foreground='red', image=image, compound=tk.CENTER)
以下の画像のようにradiobutton Widgetを描画します。
variable
variable optionを利用すると、現在選択中のラジオボタンの値を設定できます。その他のラジオボタンへ値を共有して、選択の状態を管理するために利用されます。
例えば下準備コードのself.dButton = tk.Radiobutton(frame, variable=self.variable, value='C', text='Option D', command=self.showValue)
箇所を、以下のように変更して、
1# 別解法 ##########################
2# self.dButton = tk.Radiobutton(frame)
3# self.dButton.config(value='C', text='Option D', command=self.showValue) or self.dButton.configure(value='C', text='Option D', command=self.showValue)
4##################################
5self.dButton = tk.Radiobutton(frame, value='C', text='Option D', command=self.showValue)
「Option Cのラジオボタン」をクリックしても、以下の画像のように「Option Dのラジオボタン」が選択されないようになります。
textvariable
textvariable optionを利用すると、radiobutton Widgetで利用する文字列を、可変に扱うことが可能になります。
例えば下準備コードを、以下のように変更すると、
1class Application(tk.Frame):
2+ # Aのradiobutton Widgetの文字列情報を格納する変数
3+ aRadioButtonText = None
4
5 def showValue(self):
6+ # Aのradiobutton Widgetの文字列情報を更新する。
7+ self.aRadioButtonText.set("ボタンがクリックされました。")
8
9 def __init__(self, master=None):
10 ...
11+ # Aのradiobutton Widgetの文字列情報をstring型の変数とする。
12+ # StringVarについて : https://kuroro.blog/python/K53voPjJuKFfYrjmP8FP/
13+ self.aRadioButtonText = tk.StringVar()
14+ # Aのradiobutton Widgetの文字列情報の初期化を行う。
15+ self.aRadioButtonText.set("クリックしてください")
16- self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
17+ # textvariable : radiobutton Widgetへ文字列を表示する。値を可変なself.aRadioButtonTextとする。
18+ self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', textvariable=self.aRadioButtonText, command=self.showValue)
始めに、以下の画像のようにradiobutton Widgetを描画して、
「クリックしてください」を選択すると、以下の画像のようにradiobutton Widgetを描画します。
StringVar()に関しては、Tkinterで使われるWidget変数とは?StringVarを中心に解説!?でまとめていますので、詳しく知りたい方は是非ご確認ください。
state
state optionを利用すると、radiobutton Widgetの状態を設定できます。
指定できる値としては、
- normal : radiobuttonの選択を有効。カーソルがradiobutton上にない状態を表す。デフォルト。
- disabled : radiobuttonの選択を無効。
- active : radiobuttonの選択を有効。カーソルがradiobutton上にある状態を表す。
があります。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, state="disabled") or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, state="disabled")
4##################################
5self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, state="disabled")
以下の画像のようにradiobutton Widgetを描画します。
disabledforeground
disabledforeground optionを利用すると、radiobutton Widgetの状態(state)がdisabledの時の、文字列色を設定できます。
例えば下準備コードのself.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue)
箇所を、以下のように変更すると、
1# 別解法 ##########################
2# self.aButton = tk.Radiobutton(frame)
3# self.aButton.config(variable=self.variable, value='A', text='Option A', command=self.showValue, state="disabled", disabledforeground='red') or self.aButton.configure(variable=self.variable, value='A', text='Option A', command=self.showValue, state="disabled", disabledforeground='red')
4##################################
5# 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
6self.aButton = tk.Radiobutton(frame, variable=self.variable, value='A', text='Option A', command=self.showValue, state="disabled", disabledforeground='red')
以下の画像のようにradiobutton Widgetを描画します。
radiobuttonで活用される5種類の関数
radiobuttonで活用される関数として、
- select
- deselect
- invoke
- set
- get
の5種類が存在します。順に見ていきましょう。
select
select関数を利用すると、radiobuttonを選択できます。
1.select()
で定義されます。戻り値はありません。
例えば下準備コードのself.aButton.pack()
の下へ、以下のコードを追加すると、
1 def __init__(self, master=None):
2 self.aButton.pack()
3+ self.aButton.select()
以下の画像のように「Option Aのラジオボタン」が選択されます。
deselect
deselect関数を利用すると、radiobuttonをクリア(選択中を解除)できます。
1.deselect()
で定義されます。戻り値はありません。
例えば下準備コードのself.cButton.pack()
の下へ、以下のコードを追加すると、
1 def __init__(self, master=None):
2 self.cButton.pack()
3+ self.cButton.select()
4+ self.cButton.deselect()
5+ self.aButton.select()
以下の画像のように、「Option Aのラジオボタン」が選択されます。
invoke
invoke関数を利用すると、radiobuttonを選択し、さらにcommand optionで設定される関数を実行できます。
1.invoke()
で定義されます。戻り値はありません。
例えば下準備コードのself.aButton.pack()
の下へ、以下のコードを追加すると、
1 def __init__(self, master=None):
2 self.aButton.pack()
3+ self.aButton.invoke()
以下の画像のように「Option Aのラジオボタン」が選択され、self.showValue関数が実行されます。
set
set関数を利用すると、現在選択中のradiobuttonの値を変更できます。
1# 第一引数 : 変更したいradiobuttionの値
2.set(値)
で定義されます。戻り値はありません。
例えば下準備コードのself.variable.set('B')
箇所を、以下のように変更すると、
1self.variable.set('A')
以下の画像のようにself.variable
へ'A'が設定され、「Option Aのラジオボタン」が選択されます。
get
get関数を利用すると、現在選択中のradiobuttonの値を取得できます。
1.get()
で定義されます。戻り値はありません。
例えば下準備コードを実行して、「Option Aのラジオボタン」を選択すると、以下の画像のように「You selected the option A」が表示されます。
ttk.Radiobutton()を利用してみる
ttk.Radiobutton()とは、テーマ(名前)を指定して、外観を変更するradiobutton Widgetを意味します。
radiobutton Widgetの拡張と考えるとよいでしょう。tkinterのversion 8.5で導入されました。
ttk.Radiobutton()を利用するためには、tkinterからttkをimportする必要があります。
1# tkinterからttkをimportする
2from tkinter import ttk
tk.Radiobutton()との違いとしては、
- 使用できるoptionに違いがある
- テーマ(名前)を利用して、radiobutton widgetの外観を変更する
- 「radiobuttonで活用される5種類の関数」の一部が使えない
があります。順に見ていきましょう。
使用できる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 radiobutton Widgetを作成する。
23 ttkRadiobutton = ttk.Radiobutton(frame)
24 print('ttk.Radiobutton option : ')
25 print(ttkRadiobutton.keys())
26
27 # frame Widget(Frame)を親要素として、radiobutton Widgetを作成する。
28 radiobutton = tk.Radiobutton(frame)
29 print('tk.Radiobutton option : ')
30 print(radiobutton.keys())
31
32# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
33if __name__ == "__main__":
34 # Windowを生成する。
35 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
36 root = tk.Tk()
37 app = Application(master=root)
38 # Windowをループさせて、継続的にWindow表示させる。
39 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
40 app.mainloop()
以下の画像のように、optionの種類に差分が発生します。
テーマ(名前)を利用して、radiobutton Widgetの外観を変更
ttk.Radiobutton()では、テーマ(名前)を指定することで、radiobutton 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.Radiobutton()の外観を変更
23 style = ttk.Style()
24 # テーマ(名前)の指定を行う。
25 style.theme_use('classic')
26
27 # frame Widget(Frame)を親要素として、ttk radiobutton Widgetを作成する。
28 ttkRadiobutton = ttk.Radiobutton(frame)
29
30 # frame Widget(Frame)を親要素として、radiobutton Widgetを作成する。
31 radiobutton = tk.Radiobutton(frame)
32
33 # frame Widget(Frame)を親要素として、ttk radiobutton Widgetをどのように配置するのか?
34 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
35 ttkRadiobutton.pack()
36
37 # frame Widget(Frame)を親要素として、radiobutton Widgetをどのように配置するのか?
38 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
39 radiobutton.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 app = Application(master=root)
47 # Windowをループさせて、継続的にWindow表示させる。
48 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
49 app.mainloop()
以下の画像のように、radiobutton 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('テーマ(名前)')
をご利用ください。
「radiobuttonで活用される5種類の関数」の一部が使えない
ttk.Radiobutton()では、「radiobuttonで活用される5種類の関数」で紹介しました、select, deselect関数が使えなくなります。(invoke, set, get関数は利用できます。)
radiobuttonの値を更新したり、取得する場合は、variable optionとset(), get()関数を利用ください。
まとめ
- Tkinterは、Window, Frame, Widgetで構成される。
- Tkinterで利用されるradiobuttonとは、Widgetの一種で、複数の選択肢の中から、1つを選ぶときに使われる入力フォームを意味する。
- 別名radiobutton Widgetと呼ばれる。
参考文献
- Tkinterのradiobuttonに関するサンプルコード
- 入力フォームとは?
- tkmacosxのインストールとドキュメント
- XBMについて
- カーソルについて
- マウスカーソルとは?
- Tkinterで使われるカーソルの種類
- 文字列の折り返しとは?
- テーマとは?