この記事では、TkinterのStringVar関数をテキスト変数の保存とウィジェットでのテキスト編集の方法として使用する方法について見ていきます。
また、テキスト変数に変更があったときに通知するコールバックを記述する例も見ていきます。
それでは、はじめましょう。
StringVar()って何?
Tkinter には、通常の Python 変数のように動作するプログラミングタイプが組み込まれており、Label や Entry といったウィジェットの値をより効果的に操作するために使用される追加機能があります。
これらの変数には、値を変更するためのゲッターメソッドとセッターメソッドも含まれています。
StringVar` はその一例です。
StringVar()で定義される変数は、文字列データを保持し、テキスト値を設定したり、それを取得したりすることができる。
また、この変数をEntryなどのウィジェットのtextvariableパラメータに渡すことができます。
ウィジェットはStringVar()` 変数の値が変わるたびに、自動的に新しい値に更新されます。
StringVar() 変数の定義
Tkinterの StringVar() を使って文字列変数を定義するには、以下のようにします。
- master: これは
StringVarオブジェクトが関連付けられているウィジェットです。何も指定しない場合は、デフォルトでルートウィンドウになります。 - value: value: 文字列変数に与えられる初期値です。デフォルトは “” です。
- name: 定義された変数に付けられる名前。デフォルトはPY_VARnum(PY_VAR1, PY_VAR2, など)です。
例えば、以下のコードでは StringVar() を使って文字列変数を作成し、 Label ウィジェットの textvariable パラメータに代入しています。
import tkinter as tk
master_window = tk.Tk()
master_window.geometry("150x150")
master_window.title("StringVar Example")
string_variable = tk.StringVar(master_window, "Hello Everyone!!")
label = tk.Label(master_window, textvariable=string_variable, height=150)
label.pack()master_window.mainloop() |
string_variable = tk.StringVar(master=master_window, value="Initial value of string variable")
|
StringVar() 変数の値を設定する
StringVar()`で定義された文字列変数には、2つの方法で値を設定することができます。
- コンストラクタで値を渡す。コンストラクタで値を渡す: Tkinterの変数を定義する際に、コンストラクタの
valueパラメータに文字列変数の値を渡すことができます。
string_variable = tk.StringVar(master_window)
string_variable.set("Some Text")
|
-
set()メソッドを使う。set()メソッドを使用する: 文字列の値を変更するためにset()` メソッドを使用することができます。例えば
import tkinter as tk
master_window = tk.Tk()
string_variable = tk.StringVar(master_window)
string_variable.set("Welcome to Python!!")
print(string_variable.get())
|
StringVar() 変数の値を取得する
変数 StringVar() に対して get() メソッドを実行すると、その変数に格納されているテキストを取得できます。
import tkinter as tk
master_window = tk.Tk()
master_window.geometry("300x300")
master_window.title("StringVar get() example")
def print_data():
print(string_variable.get())
string_variable = tk.StringVar(master_window)
label = tk.Label(master_window, text="Enter Data: ")
label.grid(row=0, column=0)
entry = tk.Entry(master_window, textvariable=string_variable)
entry.grid(row=0, column=1)
button = tk.Button(master_window, text="Print data", command=print_data)
button.grid(row=1, column=0, columnspan=2)
master_window.mainloop() |
この方法を使うと、Entry ウィジェットに StringVar 変数が渡されたときに、そのウィジェットのデータを取得することもできます。
import tkinter as tk
class GreetingApp(tk.Tk):
def __init__(self):
super().__init__()
self.title('Greeting Application')
self.geometry("300x300")
self.name_var = tk.StringVar()
self.name_var.trace('w', self.create_greeting_message)
self.create_widgets()
def create_widgets(self):
self.description_label = tk.Label(self, text="Enter your name:")
self.description_label.grid(column=0, row=0)
self.entry = tk.Entry(self, textvariable=self.name_var)
self.entry.grid(column=1, row=0)
self.entry.focus()
self.greeting_label = tk.Label(self)
self.greeting_label.grid(column=0, row=1, columnspan=2)
def create_greeting_message(self, *args):
name_entered = self.name_var.get()
greeting_message = ""
if name_entered != "":
greeting_message = "Hello " + name_entered
self.greeting_label['text'] = greeting_message
if __name__ == "__main__":
app = GreetingApp()
app.mainloop()
|
この記事もチェック:Tkinterのテキストウィジェットとスクロールバーの使い方を解説する