Tkinter Spinbox
ttk.Spinbox とは?
ttk.Spinbox は、Entry ウィジェットとその横に上下を示す小さなボタン (スピンボタン) が付属しているウィジェットです。
数字を段階的にインクリメント、デクリメントすることができる他、あらかじめ用意したリストの中のエントリーを上下矢印を使って選択することができます。
ttk.Spinbox のオプション
ttk.Spinbox ウィジェットの標準オプション
ttk.Spinbox ウィジェットでは次の標準オプションが利用できます。
- cursor
- state
- style
- takefocus
- validate
- validatecommand
- xscrollcommand
Spinbox は Entry ウィジェットとの組み合わせでできています。 validate, validatecommand については 「Tkinter Entry」 をみてください。
ttk.Spinbox の command オプション
ttk.Spinbox の command オプションはスピンボタンが押された時に呼ばれる関数を指定します。
ttk.Spinbox の format オプション
ttk.Spinbox の format オプションは from と to_ の範囲で数字をインクリメントまたはデクリメントするときに、Entry に表示する数字のフォーマットを指定します。 %m.nfの形式でフォーマットします。
ttk.Spinbox の from_ オプション
ttk.Spinbox の from_ オプションは Spinbox が value に保持する最小値を指定します。
ttk.Spinbox の increment オプション
ttk.Spinbox の increment オプションはスピンボタンを押して value 値を増減させるときの一回毎の変化量を指定します。
ttk.Spinbox の to オプション
ttk.Spinbox の to オプションは Spinbox が value に保持する最大値を指定します。
ttk.Spinbox の values オプション
ttk.Spinbox の values オプションはスピンボックスで選択可能にするリストを指定します。
ttk.Spinbox のスタイル
ttk.Spinbox のスタイルクラス名は TSpinbox です。
TSpinbox では次のオプションが指定できます。
- arrowcolor
- arrowsize
- background
- bordercolor
- darkcolor
- fieldbackground
- foreground
- lightcolor
- padding
- selectbackground
- selectforeground
ttk.Spinbox のサンプルコード
Tkinter Spinbox で数字をインクリメント・デクリメントする例
次の例ではスピンボタンで、数字を 0.1 ずつインクリメントまたはデクリメントします。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title('Spinbox')
# Frame
frame1 = ttk.Frame(root, padding=10)
frame1.grid()
# スピンボックス
val = StringVar()
val.set('2.5')
sp = ttk.Spinbox(
frame1,
format='%3.1f',
state='readonly',
textvariable=val,
from_=0,
to=5,
increment=0.1,
command=lambda: print(val.get()))
sp.grid()
root.mainloop()
スピンボックスへの入力値は textvariable オプションと関連付けできます。
textvariable オプションに StringVar グローバル変数を関連付け、Spinbox の command オプションで指定した関数でスピンボタンクリック時の値を表示しています。
Tkinter Spinbox でリストから項目を選ぶ例
Spinbox は事前定義されたリストを values オプションに渡すことで、ユーザーにその中の項目を選択させることができます。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title('Spinbox')
# Frame
frame1 = ttk.Frame(root, padding=10)
frame1.grid()
# スピンボックス
val = StringVar()
val.set('Orange')
fruits = ['Apple', 'Orange', 'Grape']
sp = ttk.Spinbox(
frame1,
state='readonly',
textvariable=val,
values=fruits,
command=lambda: print(val.get()))
sp.grid(row=0, column=0)
root.mainloop()
またこの例では state を readonly にすることで、Spinbox の Entry が編集を受け付けないようにしています。