Spinbox

Последнее обновление: 24.09.2022

Виджет Spinbox позволяет выбрать значение (чаще число) из некоторого списка.

Основные параметры Spinbox:

  • values: набор значений виджета в виде списка или кортежа

  • from_: минимальное значение (тип float)

  • to: максимальное значение (тип float)

  • increment: приращение значения (тип float)

  • textvariable: определяет переменную StringVar, которая хранит текущее значение виджета

  • command: указывает на функцию, которая вызывается при изменении значения виджета

  • wrap: при значении True создает зацикленный список, при котором после минимального значения идет максимальное.

  • background: фоновый цвет

  • foreground: цвет текста

  • font: шрифт виджета

  • justify: выравнивание текста, принимает значения "left" (по левому краю), "right" (по правому краю) и "center" (по центру)

  • width: ширина виджета

  • state: состояние виджета

Простейший Spinbox:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200") 

spinbox = ttk.Spinbox(from_=1.0, to=100.0)
spinbox.pack(anchor=NW)

root.mainloop()

В данном случае мы можем выбрать одно из чисел от 1 до 100. При нажатии на стрелочки вверх и вниз на виджете значение виджета будет увелиличивается и уменьшаться на единицу:

Spinbox в Tkinter и Python

По умолчанию приращение идет на единицу, но с помощью параметра increment можно установить другое значение, например, приращение на 2:

ttk.Spinbox(from_=1.0, to=100.0, increment=2)

Также по умолчанию мы можем, не используя стрелочки, ввести в текстовое поле виджета какое-либо значение, даже то, которое не входит в диапазон значений. Если нам надо запретить ввод значений в текстовое поле и оставить доступными для выбора значений только стрелочки, то для этого можно установить для параметра state значение readonly:

spinbox = ttk.Spinbox(from_=1.0, to=100.0, state="readonly")

С помощью параметра textvariable можно привязать значение Spinbox к переменной StringVar:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x150") 

spinbox_var = StringVar(value=22) # начальное значение 22

label = ttk.Label(textvariable=spinbox_var)
label.pack(anchor=NW)

spinbox = ttk.Spinbox(from_=1.0, to=100.0, textvariable=spinbox_var)
spinbox.pack(anchor=NW)

root.mainloop()

Здесь для наглядности добавлена метка, которая выводит выбранное значение. В качестве начального значения применяется число 22.

Spinbox и привязка к переменной StringVar в Tkinter и Python

Получение текущего значения

Для получения текущего значения у Spinbox вызывается метод get()

current_value = spinbox.get()

Обработка изменения значения

Чтобы обработать изменение значения нужно определить функцию, которая будет срабатывать при изменении значения, и передать ее параметру command:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x200") 

def change():
    label["text"] = spinbox.get()

label = ttk.Label()
label.pack(anchor=NW)

spinbox = ttk.Spinbox(from_=1.0, to=100.0, command=change)
spinbox.pack(anchor=NW)

root.mainloop()

В данном случае при изменении значении срабатывает функция change в которой измененяем текст метки label в соответствии с новым значением

Обработка изменения значения в Spinbox в Tkinter и Python

Установка набора значений

Данный виджет необязательно должен представлять список из числовых значений. В реальности это может быть любой набор значений в виде списка или кортежа, который можно установить с помощью параметра values:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("METANIT.COM")
root.geometry("250x150") 

spinbox_var = StringVar()

languages=["Python", "JavaScript", "C#", "Java", "C++"]

label = ttk.Label(textvariable=spinbox_var)
label.pack(anchor=NW)

spinbox = ttk.Spinbox(textvariable=spinbox_var, values=languages)
spinbox.pack(anchor=NW)

root.mainloop()

В данном случае Spinbox позволяет выбрать одно из значений из списка languages:

Установка значений в Spinbox в Tkinter и Python
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850