Виджет Tkinter Spinbox в Python — синтаксис и примеры
Виджет Tkinter Spinbox в Python позволяет выбрать значение из набора значений, который может включать диапазон чисел.
- Что такое виджет Tkinter Spinbox?
- Получение текущего значения
- Выполнение функции
- Установка дискретных шагов
- Примеры виджетов Tkinter Spinbox
- 1) Простой пример виджета Spinbox
- 2) Tkinter Spinbox с дискретными шагами
Что такое виджет 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()
Выход: