GUI

Python Tkinter widgets 基本的なウィジェット(3) Button

ユーザーはボタンを押すことでアクションを実行する。ラベルのようにテキストや画像を表示することができ、変更するためのオプションがある。

button = ttk.Button(parent, text='Sample Button', command=sampleFunc)

ボタンの内容とコールバックは、ボタンの作成と同時に指定する。他のウィジェットと同様に外観と動作を変更できる。

テキストとイメージ

ボタンは、ラベルと同じようにtext、textvariable(ほとんど使われない)、imageとcompoundの設定オプションが設定できる。

ボタンはデフォルトの設定オプションがある。active は UIのデフォルトボタンであることをTkに通知する。(ユーザが Return または Enter キーを押したときに呼び出される。)プラットフォームやスタイルによって、デフォルトボタンは異なるボーダーやハイライトで描画する。このオプションを設定しても、ReturnキーやEnterキーでボタンが起動するようなイベントバインディングは作成されないので、自分で設定する必要があることに注意が必要。

コマンドコールバック

commandオプションは、ボタンのアクションとアプリケーションをつなぐ。ユーザーがボタンを押すと、オプションで指定された関数がインタプリタによって実行・評価される。また、アプリケーションからコマンドコールバックを呼び出すようにボタンに依頼できる。

action = ttk.Button(root, text="Action", default="active", command=sampleFunc)
root.bind('<Return>', lambda e: action.invoke())

ボタンの状態

ボタンや他の多くのウィジェットの状態は、通常で開始する。ボタンはマウスの動作に反応し、押すことができ、コールバックを呼び出すことができる。状態を無効にもできる。(ボタンはグレーアウトし、マウスの動きに反応せず、押せなくなる。)プログラムは、コマンドが適用できない場合、ボタンを無効にする。

すべてのテーマ・ウィジェットは内部状態を保持し、一連のバイナリ・フラグとして表現される。各フラグは、セット(オン)またはクリア(オフ)できる。これらの異なるフラグを設定またはクリアしたり、現在の設定を確認するには、stateメソッドとinstateメソッドを使用する。ボタンは、disabledフラグを利用して、ユーザーがボタンを押すことができるかどうかを制御する。

b.state(['disabled']) # 無効フラグを設定
b.state(['!disabled']) # 無効フラグを解除
b.instate(['disabled']) # 無効ならtrue、有効ならfalse
b.instate(['!disabled']) # 無効でないならtrue、それ以外はfalse
b.instate(['!disabled'], cmd) # 無効でなければ'cmd'を実行

テーマウィジェットで利用可能な状態には、active, disabled, focus, pressed, selected, background, readonly, alternate, invalidがある。これらについては、テーマウィジェットのリファレンスで説明されている。(すべてのウィジェットは同じ状態フラグのセットを持つが、すべての状態がすべてのウィジェットで意味を持つわけではない。また、state と instate 関数は、同時に複数の状態フラグを指定できる。)