Tkinterのラジオボタン(Radiobutton)ウィジェットの使い方について解説します。ラジオボタン(Radiobutton)はユーザーが複数の選択肢から1つだけを選択することができるウィジェットです。
目次
ラジオボタン(Radiobutton)の生成
RadiobuttonはTkinterのウィジェットクラスの1つで、ユーザーに複数の選択肢を提示してその中から1つを選択してもらうことができるボタンです。
Radiobuttonウィジェットを生成して配置するには他のウィジェット同様次のように記述します。
import tkinter as tk # tk.Frameを継承したApplicationクラスを作成 class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) # ウィンドウの設定 self.master.title("ウィンドウのタイトル") # 実行内容 self.pack() self.create_widget() # create_widgetメソッドを定義 def create_widget(self): # label1ウィジェット self.label1 = tk.Label(self.master, text="プログラミング言語を\n一つ選択してください", padx = 50) self.label1.pack() # radio1ウィジェット self.select_var = tk.IntVar() # ウィジェット変数select_varを作成 self.select_var.set(1) # select_var変数に数値をセット self.languages = [("Python",1),("PHP",2),("Ruby",3),("Java",4),("C",5)] # languagesリストを定義 for language, val in self.languages: # ループ開始 self.radio1 = tk.Radiobutton(self.master, text=language, value=val, variable=self.select_var) # languagesリストを選択肢とするradio1ウィジェットを生成 self.radio1.pack(anchor=tk.W) # radio1ウィジェットを配置 if __name__ == "__main__": root = tk.Tk() app = Application(master=root) app.mainloop()
このように選択肢の横に丸いチェックボックスが付いたボタンを生成できます。
ラジオボタン(Radiobutton)が押された時の処理
Radiobuttonは押された時にチェックが入りますが、押された時に何かしらの処理を追加することもできます。
また値を保持するためチェックされた項目に応じて、別のボタンが押された時にRadiobuttonの値を利用した処理を作ることもできます。
項目が選択された時の処理を追加するにはRadiobuttonを作成する際、command引数に処理内容を渡すよう記述します。
import tkinter as tk # tk.Frameを継承したApplicationクラスを作成 class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) # ウィンドウの設定 self.master.title("ウィンドウのタイトル") # 実行内容 self.pack() self.create_widget() # create_widgetメソッドを定義 def create_widget(self): # label1ウィジェット self.label1 = tk.Label(self.master, text="プログラミング言語を\n一つ選択してください", padx = 50) self.label1.pack() # radio1ウィジェット self.select_var = tk.IntVar() self.select_var.set(1) self.languages = [("Python",1),("PHP",2),("Ruby",3),("Java",4),("C",5)] def showchoice(): # radio1の選択肢をクリックした時の処理 for language, val in self.languages: # ループ開始 if val == self.select_var.get(): # 選択されている言語とlanguagesリストの言語を照合 self.label2_text.set(language + " でよろしいですか?") # label2ウィジェットのテキストを変更 self.answer = language # answer変数に選択されている言語を保持 break for language, val in self.languages: self.radio1 = tk.Radiobutton(self.master, text=language, value=val, variable=self.select_var, command=showchoice) self.radio1.pack(anchor=tk.W) # label2ウィジェット self.label2_text = tk.StringVar() self.label2_text.set("言語を選択してください") self.label2 = tk.Label(self.master, textvariable=self.label2_text) self.label2.pack() # button1ウィジェット self.answer = "言語が選択されていません" # answer変数を定義 self.button1 = tk.Button(self.master, text="OK!", command=self.button1_clicked, padx = 20) # button1ウィジェットを生成 self.button1.pack() # button1ウィジェットを配置 # button1をクリックした時の処理 def button1_clicked(self): if self.answer == "言語が選択されていません": # ansewr変数の中身で条件分岐 self.label2_text.set(self.answer) # label2ウィジェットのテキストを書き換え else: print(self.answer) # 選ばれた言語をコンソールに標準出力 app.quit() # アプリケーションを終了 if __name__ == "__main__": root = tk.Tk() app = Application(master=root) app.mainloop()
このプログラムでは28行目から33行目でRadiobuttonの項目が選択された時の処理を、52行目から58行目ではButtonがクリックされた時にRadiobuttonで選択されている項目に応じて異なる処理をしています。
30行目で使っているgetメソッドはそのウィジェット変数が持っている値を得るためのものです。
つまりこのプログラムはユーザーがRadiobuttonから言語を選択するとlabel2の表記が「○○でよろしいですか?」に変更され、最下部のボタンを押すとユーザーが選択した言語がコンソールに表示されます。
ラジオボタン(Radiobutton)で使えるオプション引数
Radiobuttonウィジェットを生成する際はウィジェットの共通オプションに加えて次のオプションを使用することができます。
属性 | 説明 | 値 |
---|---|---|
command | 項目が選択された時に呼ばれる関数のポインタを指定します | 関数名 |
state | ボタンの状態を指定 | tk.NORMAL(通常) tk.DISABLED(押せないボタン) tk.pressed(押したまま) |
text | 表示する文字列を指定します | 任意の文字列 |
textvariable | 選択肢をウィジェット変数で指定します | ウィジェット変数 |
value | 項目が保持する値 | 整数またはウィジェット変数 |
variable | グループ内の他の項目と共有する制御変数 | ウィジェット変数 |