KURORO BLOGのロゴ

このエントリーをはてなブックマークに追加
Tkinterで使われるradiobuttonとは?活用方法から実用例を徹底解説

Tkinterで使われるradiobuttonとは?活用方法から実用例を徹底解説

今回はTkinterで使われるradiobuttonの活用方法から実用例を解説いたします。radiobuttonに関して知りたい、実用例を通して見識を深めたい方へおすすめです。是非最後までご一読ください。

目次
  1. そもそもTkinterで使われるradiobuttonとは?
    1. Tkinterの構成要素
  2. 下準備
  3. Tkinterで活用されるradiobutton Widgetの定義
    1. activebackground, activeforeground
    2. width, height
    3. background, bg
    4. anchor
    5. borderwidth, bd
    6. bitmap
    7. command
    8. cursor
    9. font
    10. fg, foreground
    11. image
    12. wraplength
    13. justify
    14. padx, pady
    15. text
    16. value
    17. indicatoron
    18. relief
    19. overrelief
    20. offrelief
    21. compound
    22. variable
    23. textvariable
    24. state
    25. disabledforeground
  4. radiobuttonで活用される5種類の関数
    1. select
    2. deselect
    3. invoke
    4. set
    5. get
  5. ttk.Radiobutton()を利用してみる
    1. 使用できるoptionに違いがある
    2. テーマ(名前)を利用して、radiobutton Widgetの外観を変更
    3. 「radiobuttonで活用される5種類の関数」の一部が使えない
  6. まとめ
  7. 参考文献
目次を開く⬇︎

そもそも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と呼ばれる。

参考文献