Python

[Tkinter] Spinboxの使い方を徹底解説!

Spinboxは、自分で指定した選択肢をウィジェット上に表示させることができ▲▼ボタンで選択肢リストから任意の選択肢を選択することができます

今回はGUIWebアプリケーションを作成する際に、非常に使い勝手の良いウィジェットである Spinbox ウィジェットの使い方を紹介していこうと思います!

Spinboxのレイアウトを変更できる様々なオプションについても解説していこうと考えていますので是非参考にしてみてください!

  • 転職のためのスキルアップとして効率的に学びたい
  • 副業としてプログラミングができるようになりたい
  • 独学での勉強に限界を感じている

これらに該当する方はプログラミングスクールがスキルアップの近道です!
是非参考にしてみてください。

【2023年最新】プログラミング上達の近道とは?スクールに通うメリットやおすすめランキングも徹底解説!プログラミングを上達するための近道を紹介しています。また、2023年度に人気の優良プログラミングスクールをランキング形式で紹介しています!特にプログラミングスクールの選び方を難易度、料金、特徴など様々な観点から紹介しています。自分自身の目的に合ったスクール選びの助けとなれば幸いです。...

未経験でも安心!
学生30代の方にもおすすめなプログラミングスクールがあります

Spinboxで数値を選択させる

使用するオプション

すらいむ管理人

今回使用するオプションは以下の通りになっています!

■ formatオプション

format = '%m.nf'  

数値の表示形式を%m.nfで指定。
m整数の桁数n小数点以下の桁数を指定します。
‘%2.0f’ の場合は、二桁の整数を指定しています。’%2.1f’ の場合は二桁の整数と小数点以下一桁を指定しています。

■ fromオプション

from_= 0   #下限値

‘0’ を指定した場合には、Spinboxで選択できる値の下限値が ‘0’ となります。

■ incrementオプション

increment = 1   #ボタンクリック時の変化量を指定

‘1’ を指定した場合には、Spinboxの▲▼ボタンをクリックした際に±1.0 増減するようになります。
‘0.1’ 等を指定すると小数点以下でも増減させられます

■ textvariableオプション

textvariable = 変数

Spinboxに表示させるテキストの書式設定。今回は、ttk.spinbox() メソッド前に値の型と初期値を指定します。

■ toオプション

to = 10   #上限値

from_で指定した値からどの値(上限値)までSpinboxで選択できるようにするかを指定できます。

■ commandオプション

command = 関数名

Spinboxの▲▼ボタンがクリックされたときに呼び出される関数を指定。

その他使用できるオプション

すらいむ管理人

その他使用できる代表的なオプションを紹介していきます!

様々な色のカラーコードを知りたい方はコチラを参考にしてください!

■ cursorオプション

#代表的なものをいくつか紹介
cursor = ”arrow”  #通常
cursor = "dot"      #点
cursor = "target"  #目のアイコン
cursor = "star"     #☆のアイコン
cursor = "hand1"  #手のアイコン
cursor = "hand2"  #手のアイコン

マウスON時のカーソルのアイコンを変更できます

■ stateオプション

# 書き込み不可にする
state = "readonly" 
# ▲▼ボタンも使用不可にする
state = "disabled"

state‘ を指定すると、Spinboxをクリックして直接値を書き込むことが不可能になります。
(readonlyであれば▲▼ボタンによる値の変更は可能

■ backgroundオプション

bg = "orange"
spinbox3

背景色を変更できます!

■ fontオプション

#太字
font=("", 10, "bold")
#下線
font=("", 10, "underline")
#フォントサイズ変更
font=("", 15, "underline")
spinbox font
太字にした結果
spinbox underline
下線を引いた結果
spinbox fontsize
フォントサイズ変更

■ selectオプション

selectbackground = "orange"
seleckforeground = "orange"
spinbox select background
selectbackground
spinbox select2
selectforeground

背景色を選択する際のデフォルトは青色みたいです!

■ justifyオプション

justify = tk.LEFT
justify = tk.CENTER
justify = tk.RIGHT
spinbox justify

■ wrapオプション

#選択肢をループさせる
wrap = True
#選択肢をループさせない
wrap = False

選択値が下限値に達した際に上限値に戻る、あるいは上限値に達した際に下限値に戻る機能を追加するかを指定できます。

■ takefocusオプション

takefocus = False   #無効
takefocus = True    #有効

Tabキーによるフォーカス移動機能を有効にするか無効にするか指定できるオプションです。

■ borderwidthオプション

borderwidth=10
spinbox2

枠線の幅を指定できます。

■ foregroundオプション

fg = "orange"
文字色を変更させることができます。

■ buttonbackgroundオプション

buttonbackground = "orange"

▲▼ボタンの背景色を変更できます!

■ reliefオプション

relief = tk.FLAT
relief = tk.SUNKEN
relief = tk.RIDGE
relief = tk.GROOVE
relief = tk.RAISED
relief = tk.SOLID
spinbox relief
枠線を変更可能

■ disabledオプション

Stateオプションで”disabled“を指定している場合に有効なオプション。

disabledbackground = "orange"
disabledforeground = "orange"
spinbox disabled1
disabledbackground
spinbox disabled2
disabledforeground

■ readonlyオプション

readonlybackground = "orange"
spinbox readonly

文字色の変更はできませんでした。。。

選択内容を取得する方法

Spinboxで指定した値を取得すためには、.get() メソッドを使用します。
具体的には、textvariableで指定した変数の値に対して使用することで取得できます。

詳しい使い方は実例を参考にしてください!

textvariable.get()

整数値を選択させる方法

整数値を選択できるSpinboxを作成してみます!

今回は、初期値を 5 として、0~10の値を 1 刻みで変更可能なSpinboxを作成してみます!

import tkinter as tk

def select_val(val):
    # spinboxの現在地を取得
    now_value = val.get()
    print(now_value)

def gen_spinbox(root):
    # ラベルを配置
    label = tk.Label(root, text='数値を選択してください')
    label.pack()
    # スピンボックスを作成
    val = tk.IntVar()
    val.set('5')         #初期値を指定
    spinbox = tk.Spinbox(
        root,
        format='%2.0f',  #数値の桁数を指定 
        textvariable=val,
        from_=0,         #下限値を指定
        to=10,           #上限値を指定
        increment=1,     #変化量を指定
        command=lambda: select_val(val))  #クリック時に実行される関数を指定
    spinbox.pack()

if __name__ == '__main__':
    root = tk.Tk()
    root.geometry('200x100')
    root.title('Spinbox')
    gen_spinbox(root)
    root.mainloop()

(実行結果)

result of spinbox1

このように数値を変化させることのできるSpinboxを無事作成できました!!!

小数を選択させる方法

先ほどは整数の値を変化させていましたが、小数点以下の値を変化させる方法を解説していきます。先ほどのgen_spinbox 関数を以下のように書き換えてください。

(書き換えた部分にのみコメント追加↓)

def gen_spinbox(root):
    label = tk.Label(root, text='数値を選択してください')
    label.pack()

    val = tk.StringVar()    #StringVarに変更
    val.set('5.0')              #小数点以下も表示させておく
    spinbox = tk.Spinbox(
        root,
        format='%2.1f',     #数値の桁数を指定 
        textvariable=val,
        from_=0,  
        to=10,
        increment=0.1,     #変化量を指定
        command=lambda: select_val(val))
    spinbox.pack()

(実行結果)

すらいむ管理人

ちなみに increment の値を0.5とすると、0.5刻みでSpinboxの値が変化します!

.get() メソッドで値を取得する際に、浮動小数点値を取得したい場合には変数を StringVar() として文字列として指定してあげる必要があるみたいです。

# 小数点を取得したい場合
val = tk.StringVar()
# 整数を取得したい場合
val = tk.IntVar()

Spinboxで任意の文字列を選択させる

使用するオプション

今回初めて使用するオプションを紹介していきます。
既に紹介しているオプションに関してはコチラを参考にしてみてください。

■ valuesオプション

select_list = ['A', 'B', 'C', ...]
values = select_list

valuesオプションには、選択したい任意の選択肢をリストとして渡してあげることでSpinboxに表示させることができます!

今回の実例では国名を選択させる例を挙げているので、textvariableの型を tk.StringVar() としていますが、例えば任意の数値を扱いたい場合であれば tk.IntVar() を用いると良いです。

    # スピンボックスを作成
    val = tk.IntVar()      #任意の数値を選択する場合はIntVar()とする
    value_list = ['5', '10', '20']    #選択肢を指定
    val.set('5')              #初期値を指定
    spinbox = tk.Spinbox(
        root,
        textvariable=val,
        values=value_list)

任意の選択肢を選択させる方法

任意の選択肢を選択させる例を挙げてみます。
今回は、国名を選択できるようなSpinboxを作成してみます

import tkinter as tk

def select_val(val):
    # spinboxの現在地を取得
    now_value = val.get()
    print(now_value)

def gen_spinbox(root):
    # ラベルを配置
    label = tk.Label(root, text='数値を選択してください')
    label.pack()
    # スピンボックスを作成
    val = tk.StringVar()
    countries = ['Japan', 'America', 'Australia']    #選択肢を指定
    val.set('Japan')         #初期値を指定
    spinbox = tk.Spinbox(
        root,
        textvariable=val,
        values=countries,
        command=lambda: select_val(val))  #クリック時に実行される関数を指定
    spinbox.pack()

if __name__ == '__main__':
    root = tk.Tk()
    root.geometry('200x100')
    root.title('Spinbox')
    gen_spinbox(root)
    root.mainloop()

(実行結果)

result of countries

すらいむ管理人

このように任意の選択肢を指定できるSpinboxが作成できました

以上となります。
最後まで見ていただきありがとうございました!

他にも記事を書いていますので是非参考にしてみてください!

[Tkinter] 矢印キーでウィジェットの選択(フォーカス)を変更/移動させる方法!tkinterで作成したGUI上のボタンやテキストボックスに、矢印キーを使ってカーソルを合わせる方法(フォーカスする方法)を分かりやすく解説しています。また、クリックでフォーカスする方法も解説しています。.focus_set(), .bind()...