この記事では、TkinterのIntVar関数について、またそれを使ってPythonで整数の変数を保存、取得、管理する方法について学びます。
それでは、IntVar()関数を使い始めましょう。
Tkinter IntVar() 関数
Tkinter には、通常の Python 型と同様に動作する組み込みのプログラミング型があり、 Label や Entry といったウィジェットの値をより効率的に操作するための機能が追加されています。
これらの変数には、値を変更するためのゲッターメソッドとセッターメソッドも含まれています。
IntVar` はその一例です。
IntVar()` 関数を用いて定義された変数は整数データを保持し、ゲッターメソッドやセッターメソッドを用いて整数データを設定したり取得したりすることができる。
これらの変数は、例えばラジオボタンやチェックボックスボタンの変数パラメータ、ラベルウィジェットのtextvariableパラメータなど、様々なウィジェットのパラメータに渡すことができます(例を見てみましょう)。
これらの変数がウィジェットに接続されると、接続は双方向に働きます:IntVar()変数が変化すると、ウィジェットの値も自動的に新しい値に更新されます。
この記事もチェック:PythonのTkinterでボタンの状態を取得、有効・無効の切り替えを実装する
Tkinter IntVar() 変数の定義
Tkinter の IntVar() 関数は、以下のパラメータを受け取って変数を定義します。
- master: master:
IntVar()変数が関連付けられているウィンドウです。何も指定しない場合は、デフォルトでルートウィンドウになります。 - value: 整数型変数に与えられる初期値.デフォルトは0です。
- name: 定義された変数に付けられる名前。デフォルトは PY_VARnum (like PY_VAR1, PY_VAR2, etc)。
import tkinter as tk
master_window = tk.Tk()
master_window.geometry("250x150")
master_window.title("IntVar Example")
integer_variable = tk.IntVar(master_window, 255)
label = tk.Label(master_window, textvariable=integer_variable, height=250)
label.pack()master_window.mainloop() |
import tkinter as tk
master_window = tk.Tk()
master_window.geometry("250x150")
master_window.title("IntVar Example")
integer_variable = tk.IntVar(master=master_window, value=1)
label = tk.Label(master_window, textvariable=integer_variable, height=250)
label.pack()integer_variable.set(100)
master_window.mainloop() |
IntVar() 変数の値を変更する
IntVar()は Tkinter 組み込みのプログラミングタイプなので、変数の値を変更するための setter メソッドを含んでいます。
整数データの値を変更するには、set()` メソッドを使用します。
import tkinter as tk
master_window = tk.Tk()
int_var = tk.IntVar(master = master_window, value = 255)
num = int_var.get()
print(type(num))
print(num)
|
IntVar() 変数の値を取得する
IntVar()変数に対してget()` メソッドを実行すると、その変数に格納されているテキストを取得することができます。
<class 'int'>255 |
結果は以下の通りです。
import tkinter as tk
class SumOfTwoNumbers(tk.Tk):
def __init__(self):
super().__init__()
self.title("Sum of 2 Numbers")
self.geometry("300x300")
# define IntVar() variables A and B
self.A = tk.IntVar()
self.B = tk.IntVar()
# assign methods to notify on IntVar() variables
self.A.trace_add("write", self.calculate_sum)
self.B.trace_add("write", self.calculate_sum)
self.create_widgets()
def create_widgets(self):
self.A_label = tk.Label(self, text="A: ")
self.B_label = tk.Label(self, text="B: ")
self.A_entry = tk.Entry(self, textvariable=self.A)
self.B_entry = tk.Entry(self, textvariable=self.B)
self.sum_label = tk.Label(self, text="Sum: ")
self.result_label = tk.Label(self, text=self.A.get() + self.B.get())
self.A_label.grid(row=0, column=0, padx=5, pady=5)
self.A_entry.grid(row=0, column=1, padx=5, pady=5)
self.B_label.grid(row=1, column=0, padx=5, pady=5)
self.B_entry.grid(row=1, column=1, padx=5, pady=5)
self.sum_label.grid(row=2, column=0, padx=5, pady=5)
self.result_label.grid(row=2, column=1, padx=5, pady=5)
def calculate_sum(self, *args):
try:
num_a = self.A.get()
except:
num_a = 0
try:
num_b = self.B.get()
except:
num_b = 0
self.result_label['text'] = num_a + num_b
if __name__ == "__main__":
app = SumOfTwoNumbers()
app.mainloop()
|
Tkinter IntVar() の例
IntVar()のさまざまな使用例について考えてみましょう。
ラジオボタンとチェックボックスウィジェットで選択された値を監視する
IntVar()` 変数のもう一つの一般的な使い方は、次の例のようにラジオボタンとチェックボックスのウィジェットで選択された値を追跡することです。
import tkinter as tk
class RadioButtonExample(tk.Tk):
def __init__(self):
super().__init__()
self.title("Radio Button Example")
self.geometry("300x300")
# define IntVar() for selected value
self.selected_value = tk.IntVar()
self.create_widgets()
def create_widgets(self):
self.intro_label = tk.Label(
self,
text="Choose your favourite language").pack()
self.rb1 = tk.Radiobutton(
self,
text="Python",
padx=5,
pady=5,
variable=self.selected_value,
value=1).pack()
self.rb2 = tk.Radiobutton(
self,
text="Java",
padx=5,
pady=5,
variable=self.selected_value,
value=2).pack()
self.rb3 = tk.Radiobutton(
self,
text="C++",
padx=5,
pady=5,
variable=self.selected_value,
value=3).pack()
self.rb4 = tk.Radiobutton(
self,
text="Dart",
padx=5,
pady=5,
variable=self.selected_value,
value=4).pack()
self.text_label = tk.Label(
self,
text="Option selected is:",
pady=15
).pack()
self.value_label = tk.Label(
self,
textvariable=self.selected_value,
padx=5,
pady=5).pack()
if __name__ == "__main__":
app = RadioButtonExample()
app.mainloop()
|
その出力です。
まとめ
この記事では、Tkinter の IntVar() とそれを使用できる様々なシナリオについて学びました。
また、他のウィジェットを自動的に更新するのに役立つコールバックを定義することで、生活をより簡単にすることができます。
お読みいただきありがとうございました。