今回はRadioButtonを少し触ってみます。
今回作ったもの ↓↓↓

まずRadioButton以外を作ってみます。
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super(App, self).__init__()
self.title("Check Button Example")
self.geometry("+{}+{}".format(300, 300))
self.set_widgets()
def set_widgets(self):
self.frame = tk.Frame(self, bg="white",
width=300, height=300)
self.frame.pack()
self.button_radio = tk.Button(self.frame, text="sample", relief="groove")
self.button_radio.place(x=200, y=150)
self.button_quit = tk.Button(self.frame, text="quit",
relief="groove", command=self.quit)
self.button_quit.place(x=200, y=200)
def run(self):
self.mainloop()
if __name__ == "__main__":
app = App()
app.run()
このプログラムを動かすと、下のウィンドウが立ち上がります。

このウィンドウにRadioButtonを配置します。
RadioButtonの作り方は他のwidgetと同じように作ります。
widget = RadioButton(parent, **options)
今回はFrameにRadioButtonを貼り付けるので parentには self.frameを渡します。
optionでtext, value, variableの設定をします。
text - RadioButtonに表示するテキスト
value - RadioButtonに値を設定する。ほかのRadioButtonの値と重複してはいけない。
variable - 変数の設定。
上のプログラムの set_widgetsメソッドに以下を追加します。
self.radio_var = tk.IntVar()
self.radio_var.set(1)
self.radio_o = tk.Radiobutton(self.frame, text="o", value=1,
variable=self.radio_var)
self.radio_x = tk.Radiobutton(self.frame, text="x", value=0,
variable=self.radio_var)
ここでやってることは、まず VariableクラスのIntVarを用意します。
tkinterのVariableクラスを使うと値を新しく設定することができたり、値が変わったら特定の関数を呼び出すことができます。
IntVarを使う理由はどのRadioButtonが選択されているのかを知るためです。
今回2つのRadioButtonを作っていますが、それぞれoptionのvalueで1と0を設定しています。self.radio_varにはvalueの値が入るようになります。例えば、oが選択されていると self.radio_varには1が、xが選択されていると0がセットされるようになります。
self.button_radioが押されたらself.radio_varの値を取得するように、上のプログラムを以下のように変えます。ボタンが押されたらself.get_radioが呼ばれるようにしました。
self.button_radio = tk.Button(self.frame, text="sample",
relief="groove", command=self.get_radio)
self.get_radioの中身です。
def get_radio(self):
print(self.radio_var.get())
これで、どのRadioButtonが選択されているのかを判別できるようになります。
全体のソース
import tkinter as tk
class App(tk.Tk):
def __init__(self):
super(App, self).__init__()
self.title("Check Button Example")
self.geometry("+{}+{}".format(300, 300))
self.set_widgets()
def set_widgets(self):
self.frame = tk.Frame(self, bg="white",
width=300, height=300)
self.frame.pack()
self.button_radio = tk.Button(self.frame, text="sample",
relief="groove", command=self.get_radio)
self.button_radio.place(x=200, y=150)
self.button_quit = tk.Button(self.frame, text="quit",
relief="groove", command=self.quit)
self.button_quit.place(x=200, y=200)
self.radio_var = tk.IntVar()
self.radio_var.set(1)
self.radio_o = tk.Radiobutton(self.frame, text="o", value=1,
variable=self.radio_var)
self.radio_x = tk.Radiobutton(self.frame, text="x", value=0,
variable=self.radio_var)
self.radio_o.place(x=100, y=100)
self.radio_x.place(x=100, y=120)
def get_radio(self):
print(self.radio_var.get())
def run(self):
self.mainloop()
if __name__ == "__main__":
app = App()
app.run()