GUI

Python Tkinter widgets 発展的なウィジェット(13) Spinbox

スピンボックスウィジェットでは、ユーザーが数字(任意のリスト)を選択することができる。現在の値を表示するエントリーのようなウィジェットと、選択可能な範囲を選択するための上下矢印のペアを組み合わせることで実現される。

v = StringVar()
s = ttk.Spinbox(parent, from_=0.0, to=10.0, textvariable=v)

スピンボックスは、スケールウィジェットと同様にある範囲(fromとtoの設定オプションで指定)の数値を選択することができる。(UIは異なる。)また、インクリメントを指定することで、上下のボタンのクリックのたびにどれだけ値が変化するかを制御できる。

リストボックスやコンボボックスと同様に、スピンボックスも任意の文字列のリストから項目を選択するために使用できる。(コンボボックスと同じように動作する。)値のリストを指定すると、fromとtoの設定がオーバーライドされる。

デフォルトの状態では、スピンボックスは、ユーザーが上下のボタンを使って、または現在の値を表示する入力エリアに直接入力して、値を選択できる。後者の機能を無効にして、上下のボタンのみを使用できるようにしたい場合は、readonly stateフラグを設定する。

s.state(['readonly'])

他のテーマ別ウィジェットのように、disabled state フラグでスピンボックスを無効にしたり、instate メソッドで状態を確認できる。スピンボックスもエントリウィジェットと同じように、validate と validatecommand の設定オプションを使ってバリデーションをサポートする。

ブーリアンラップオプションがあり、値が開始値または終了値を超えたときに折り返すかどうかを決定する。また、スピンボックスの現在の値を保持するエントリの幅を指定できる。

スピンボックスの現在値のゲット・セットの方法はいくつかある。通常、textvariable設定オプションでリンクされた変数を指定する。(変数への変更はスピンボックスに反映され、スピンボックスへの変更はリンクされた変数に反映される。)同様にset valueとgetメソッドで直接値をゲット・セットできる。

スピンボックスは、ユーザーが上(<<Increment>>)または下(<<Decrement>>)を押すと仮想イベントを発生させる。command設定オプションで、変更時に呼び出されるコールバックを指定できる。