Виджет Tkinter Spinbox в Python — синтаксис и примеры

Виджет 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()

Выход:

Пример создания виджета Spinbox

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()

Выход:

Создание виджета Spinbox с дискретными шагами

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *