### 16.1.6.4 ウィジェット変数を結びつける

(テキストエントリ・ウィジェットのような)いくつかのウィジェットの現在の値の設定は特別なオプションを使うことでアプリケーション変数に直接関連付けられています。これらのオプションとは`variable`、`textvariable`、`onvalue`、`offvalue`および`value`です。この関連付けは双方向に機能します: 変数が何らかの理由で変化した場合は、それが関連付けられているウィジェットは新しい値を反映するように更新される。

不幸なことに、`Tkinter`の現在の実装では、任意のPython変数をウィジェットに`variable`あるいは`textvariable`オプションを通して渡すことができません。これが機能するような変数のただ一つの種類は、`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.button.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()