GUI

Python Tkinter widgets 基本的なウィジェット(6) Entry

入力ウィジェットでは、1行のテキストフィールドに文字列(名前、パスワードなど)を入力できる。

text = StringVar()
name = ttk.Entry(parent, textvariable=text)

width設定オプションを指定すると、エントリーの幅を何文字にするかを指定できる。(制限できる)

入力内容

チェックボタンやラジオボタンの値の関連付けと同様に、textvariable設定オプションで指定されたリンクされた変数を通してアクセスする。

また、リンク先の変数を介さずに、エントリーウィジェットの値を取得したり、変更したりすることも可能。get メソッドは現在の値を返し、delete と insert メソッドで内容を変更できる。

print('現在の値 %s' % text.get())
text.delete(0,'end')
text.insert(0, 'new text')

変更を監視

エントリーウィジェットには、エントリーが変更されたときにコールバックを起動するコマンドオプションがない。変更を監視するには、リンクされた変数の変更を監視する必要がある。

def trace_add_func(*args):
    ...
text.trace_add("write", trace_add_func)

上記の例は、変数を観測し、変数の読み込み、書き込み、削除時にコールバックを起動する、より複雑なシステムのごく一部。複数のコールバックを起動し、それらを追加または削除 (trace_remove) し、それらをイントロスペクト (trace_info) することができる。

TkinterではStringVar(またはVariableの任意のサブクラス)の変更を監視できる。古いトレースツールも新しいトレースツールも、Tclのtraceコマンドに対する非常に薄い(そしてひどくPythonicではない)フロントエンド。

パスワード

実際の内容を箇条書きなどの記号で表示するパスワードに使用することができる。これを行うには、show configuration オプションを表示したい文字に設定する。

entry = ttk.Entry(parent, textvariable=password, show="*")

ウィジェットの状態

ボタンと同様に、エントリもstateコマンドで無効状態にできる(instateで状態を取得できる)。このフラグを設定すると、ユーザーはエントリを変更できなくなるが、エントリ内のテキストを選択したり、クリップボードにコピーしたりすることは可能。また、エントリーウィジェットが検証に失敗した場合は、無効状態に設定される。