Глава 16 · Создаём классные приложения с Tkinter
Виджеты выбора: Combobox, Listbox, Spinbox, Scale
Каждый из этих виджетов решает свой вариант одной задачи: выбрать значение из ограниченного множества.
Combobox — выбор из списка
combobox.py
variant = ttk.Combobox(root, values=["Маленький", "Средний", "Большой"], state="readonly")
variant.current(0)
variant.pack()
state="readonly"
Без
state="readonly" пользователь сможет напечатать в поле произвольный текст, не входящий в список. Если нужен выбор именно из предложенных вариантов — используйте "readonly".Listbox — список для выбора одного/нескольких элементов
listbox.py
spisok = tk.Listbox(root)
spisok.insert("end", "Молоко")
spisok.insert("end", "Хлеб")
spisok.insert("end", "Яблоки")
spisok.pack()
def pokazat_vybor():
indeksy = spisok.curselection()
print([spisok.get(i) for i in indeksy])
Spinbox — поле со стрелками для пошагового выбора
spinbox.py
kolichestvo = ttk.Spinbox(root, from_=1, to=10)
kolichestvo.pack()
from_/to — не строгая защита от любого текста
Spinbox — это поле, похожее на Entry, с добавленными стрелками, которые пошагово перебирают значения из заданного диапазона. Параметры from_/to задают диапазон для самих стрелок — они не являются универсальной гарантией, что пользователь не введёт с клавиатуры произвольный текст напрямую в поле. Если нужен строгий выбор только из диапазона — потребуется дополнительно продумать валидацию или readonly-подобное состояние.Scale — ползунок для значения из диапазона
scale.py
gromkost = ttk.Scale(root, from_=0, to=100, orient="horizontal")
gromkost.set(50)
gromkost.pack()
Scale возвращает float
.get() у Scale возвращает число с плавающей точкой, даже если визуально ползунок стоит на целом делении — округляйте явно (round(...)), если нужно целое число.Практика: Combobox, Listbox, Spinbox, Scale
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально