20.1.6.4 ウィジェット変数を関連付ける

ウィジェットによっては、(テキスト入力ウィジェットのように) 特殊なオプションを使って、現在設定されている値をアプリケーション内の 変数に直接関連付けできます。このようなオプションにはvariabletextvariableonvalueoffvalueおよびvalue があります。この関連付けは双方向に働きます: 変数の値が何らかの理由で 変更されると、関連付けされているウィジェットも更新され、新しい値を 反映します。

残念ながら、現在のTkinter の実装では、 variabletextvariable オプションでは 任意の Python の値をウィジェットに渡せません。 この関連付け機能がうまく働くのは、 Tkinter モジュール内で Variable というクラスから サブクラス化されている変数によるオプションだけです。

Variable には、StringVarIntVarDoubleVarおよび BooleanVar といった便利なサブクラスがすでにすでに数多く定義 されています。こうした変数の現在の値を読み出したければ、 get() メソッドを呼び出します。また、値を変更したければ set() メソッドを呼び出します。 このプロトコルに従っている限り、それ以上なにも手を加えなくても ウィジェットは常に現在値に追従します。

例えば:

class App(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        
        self.entrythingy = Entry()
        self.entrythingy.pack()
        
        # アプリケーション変数です
        self.contents = StringVar()
        # 変数の値を設定します
        self.contents.set("this is a variable")
        # エントリウィジェットに変数の値を監視させます
        self.entrythingy["textvariable"] = self.contents
        
        # ユーザがリターンキーを押した時にコールバックを呼び出させます
        # これで、このプログラムは、ユーザがリターンキーを押すと
        # アプリケーション変数の値を出力するようになります。
        self.entrythingy.bind('<Key-Return>',
                              self.print_contents)

    def print_contents(self, event):
        print "hi. contents of entry is now ---->", \
              self.contents.get()

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。