Tkinterではウィジェットのオプション引数に文字列や数値といった値を渡すことができますが、variable や textvariable といったオプションには変数を渡すことができます。これらを活用することで変数に格納した値を使いまわしたり、動的に値を変更する処理が効率的に行えるようになります。
目次
Widget変数とは
Tkinter のLabel や Radiobutton といったいくつかのウィジェットには variable や textvariable といったオプション引数が用意されており、これらの値として変数を渡すことができます。
オプション引数にはウィジェットで使える変数オブジェクトが用意されており、これらを使うことで動的な処理を効率的に行うことができます。
これらのオプションの値はアプリケーションの変数と直接繋がっており、変数の値が変更された場合とウィジェットの状態が更新された場合の双方で動作します。
ウィジェット変数への値の設定には set メソッドを使い、値の取得には get メソッドを使います。
4つのWidget変数
StringVar
文字列を保持します。
任意の変数名 = StringVar(value="任意の文字列") # ウィジェット変数を生成 任意の変数名.set("任意の文字列") # 変数の値に任意の文字列を設定 任意の変数名.get() # ウィジェット変数の値を取得
IntVar
整数を保持します。
任意の変数名 = IntVar(value=任意の整数) # ウィジェット変数を生成 任意の変数名.set(任意の整数) # 変数の値に任意の整数を設定 任意の変数名.get() # ウィジェット変数の値を取得
DoubleVar
浮動小数点を保持します。
任意の変数名 = DoubleVar(value=任意の数値) # ウィジェット変数を生成 任意の変数名.set(任意の数値) # 変数の値に任意の数値を設定 任意の変数名.get() # ウィジェット変数の値を取得
BooleanVar
真偽値を保持します。
任意の変数名 = BooleanVar(value=任意の真偽値) # ウィジェット変数を生成 任意の変数名.set(任意の真偽値) # 変数の値に任意の真偽値を設定 任意の変数名.get() # ウィジェット変数の値を取得
Widget変数を用いた処理の例
実際にWidget変数を用いた簡単なアプリケーションを作成してみましょう。
import tkinter as tk # tk.Frameを継承したApplicationクラスを作成 class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) # ウィンドウの設定 self.master.title("ウィンドウのタイトル") self.master.geometry("300x200") # ウィジェット変数を生成 self.name_var = tk.StringVar(value="山田 太郎") self.age_var = tk.IntVar(value=20) self.agreement_var = tk.BooleanVar(value=False) # 実行内容 self.pack() self.create_widget() # create_widgetメソッドを定義 def create_widget(self): # 氏名 self.name = tk.Entry(self.master, textvariable = self.name_var) self.name.pack() # 年齢 self.age = tk.Spinbox(self.master, textvariable=self.age_var, from_=0, to=120) self.age.pack() # 同意 self.agreement = tk.Checkbutton(self.master, text="同意します",variable=self.agreement_var) self.agreement.pack() # ボタンフレーム self.buttonframe = tk.Frame(self.master) self.buttonframe.pack() # sampleボタン self.sample = tk.Button(self.buttonframe,text="入力例を表示",command=self.inputSampleValue) self.sample.pack(side="left") # 確認ボタン self.verify = tk.Button(self.buttonframe,text="確認",command=self.outputValue) self.verify.pack(side="left") # inputSampleValueメソッドを定義 def inputSampleValue(self): self.name_var.set(value="鈴木 一郎") self.age_var.set(value=31) self.agreement_var.set(value=False) # outputValueメソッドを定義 def outputValue(self): print(self.name_var.get()) print(self.age_var.get()) print(self.agreement_var.get()) if __name__ == "__main__": root = tk.Tk() app = Application(master=root) app.mainloop()
このアプリケーションは氏名、年齢、同意ボタンのオプション引数にウィジェット変数を用いています。値は初期値が設定されているほか、「入力例を表示」ボタンを押すと予めこちらで用意した関数が実行されてウィジェット変数の値が書き換えられます。
また、これらのウィジェット変数の値はユーザーがGUI画面を操作して書き換えた場合も変更されます。
「確認ボタン」を押すと各ウィジェット変数の現在の値がコンソールに表示されます。