【Tkinter】ラジオボタン(Radiobutton)の使い方

【Tkinter】ラジオボタン(Radiobutton)ウィジェットの使い方

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 グループ内の他の項目と共有する制御変数 ウィジェット変数
このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。