Виджет Tkinter Spinbox в Python позволяет выбрать значение из набора значений, который может включать диапазон чисел.
Что такое виджет Tkinter Spinbox?
В Spinbox есть область для отображения текущего значения и пара стрелок. При нажатии на направленную вверх стрелку счетчик переходит к следующему большему значению в последовательности. Если текущее значение достигло максимума, вы можете установить его на минимум.
С другой стороны, если щелкнуть по направленной вниз стрелке, счетчик уменьшит текущее значение до следующего меньшего значения в последовательности. Если текущее значение достигло самого низкого значения, вы можете установить его на максимум.
Кроме того, вы можете напрямую ввести значение в виджет Spinbox, как и в виджете Entry.
Для создания виджета Spinbox используйте конструктор ttk.Spinbox:
ttk.Spinbox(master, from_, to, textvariable, wrap)
В этом синтаксисе:
- master — это родительский виджет виджета Spinbox.
- from_ — минимальное значение. Поскольку from — это ключевое слово Python, его необходимо дополнить подчеркиванием(_), чтобы избежать ошибки компиляции.
- Значение to представляет собой максимальное значение.
- textvariable указывает объект StringVar или IntVar класса Tkinter, который содержит текущее значение Spinbox.
- Wrap — это логическое значение. Если wrap установлен на True, то когда текущее значение достигает максимального значения, оно устанавливается на минимальное значение, если щелкнуть по направленной вверх стрелке, и наоборот. Если wrap установлен на False, то виджет устанавливает текущее значение на максимальное значение, если щелкнуть по направленной вниз стрелке.
Обратите внимание, что ttk.Spinbox доступен с Python 3.7. Если вы используете более раннюю версию, вам нужно использовать tk.Spinbox.
Получение текущего значения
Чтобы получить текущее значение Spinbox, вы можете получить доступ к textvariable. Например:
current_value = tk.StringVar(value=0)
spin_box = ttk.Spinbox(
container,
from_=0,
to=30,
textvariable=current_value,
wrap=True)
В этом примере current_value содержит текущее значение виджета Spinbox. Вы можете получить его, вызвав метод get():
current_value.get()
Также вы можете использовать метод get() объекта Spinbox:
spin_box.get()
Выполнение функции
Чтобы выполнить функцию при изменении значения Spinbox, можно назначить эту функцию параметру command. Например:
def value_changed():
print(current_value.get())
current_value = tk.StringVar(value=0)
spin_box = ttk.Spinbox(
container,
from_=0,
to=30,
textvariable=current_value,
command=value_changed)
В этом примере функция value_changed будет выполняться автоматически всякий раз, когда изменяется значение Spinbox.
Установка дискретных шагов
Чтобы задать список дискретных шагов для Spinbox, вы назначаете кортеж дискретных чисел параметру values следующим образом:
ttk.Spinbox(
...
values=tuple
...
)
Примеры виджетов Tkinter Spinbox
Давайте рассмотрим несколько примеров создания виджета Spinbox.
1) Простой пример виджета Spinbox
Следующая программа иллюстрирует, как использовать Spinbox:
import tkinter as tk
from tkinter import ttk
# root window
root = tk.Tk()
root.geometry('300x200')
root.resizable(False, False)
root.title('Spinbox Demo')
# Spinbox
current_value = tk.StringVar(value=0)
spin_box = ttk.Spinbox(
root,
from_=0,
to=30,
textvariable=current_value,
wrap=True)
spin_box.pack()
root.mainloop()
Выход:

2) Tkinter Spinbox с дискретными шагами
В следующем примере показано, как создать Spinbox с дискретными шагами:
import tkinter as tk
from tkinter import ttk
# root window
root = tk.Tk()
root.geometry('300x200')
root.resizable(False, False)
root.title('Spinbox Demo')
# spinbox
current_value = tk.StringVar()
spin_box = ttk.Spinbox(
root,
from_=0,
to=50,
values=(0, 10, 20, 30, 40, 50),
textvariable=current_value,
wrap=True)
spin_box.pack()
root.mainloop()
Выход:

