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

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

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

Variable には、`StringVar`、`IntVar`、`DoubleVar`および `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()