Рассмотрим, как создать шкалу с ползунком с помощью виджета Tkinter Scale в Python.
Что такое виджет Tkinter Scale?
Ползунок позволяет вводить значение, перемещая индикатор. Он может быть вертикальным или горизонтальным:

Чтобы создать шкалу с ползунком, используйте конструктор ttk.Scale() следующим образом:
ttk.Scale(container,from_,to)
В этом синтаксисе container определяет родительский компонент ползунка.
Параметры from_ и to задают минимальное и максимальное значения ползунка. Поскольку from — это ключевое слово в Python, Tkinter использует вместо него from_.
По умолчанию слайдер горизонтальный. Чтобы указать, как расположить слайдер, используйте параметр orient, который может быть горизонтальным или вертикальным. Например:
slider = ttk.Scale(
root,
from_=0,
to=100,
orient="vertical", # horizontal
)
Получение текущего значения
Чтобы получить текущее значение ползунка, можно присвоить DoubleVar переменной ползунка следующим образом:
current_value = tk.DoubleVar()
slider = ttk.Scale(
root,
from_=0,
to=100,
orient="horizontal",
variable=current_value
)
Другой способ получить текущее значение ползунка — вызвать метод get() объекта ползунка:
slider.get()
Выполнение обратного вызова
Чтобы запускать функцию при каждом изменении значения ползунка, вы можете назначить ее параметру command следующим образом:
def slider_changed(event):
print(slider.get())
slider = ttk.Scale(
root,
from_=0,
to=100,
orient="horizontal",
variable=current_value
command=slider_changed
)
Обратите внимание, что вызов функции при изменении значения ползунка может вызвать проблемы с производительностью.
Отключение ползунка
Чтобы отключить ползунок, установите его состояние на «disabled». Чтобы снова включить его, установите его состояние на «normal».
slider['state'] = 'disabled' slider['state'] = 'normal'
По умолчанию ползунок находится в «нормальном» состоянии.
Пример слайдера Tkinter
Следующая программа иллюстрирует, как использовать виджет слайдера Tkinter. Метка обновит текущее значение слайдера, когда вы его измените.
import tkinter as tk
from tkinter import ttk
# root window
root = tk.Tk()
root.geometry('300x200')
root.resizable(False, False)
root.title('Slider Demo')
root.columnconfigure(0, weight=1)
root.columnconfigure(1, weight=3)
# slider current value
current_value = tk.DoubleVar()
def get_current_value():
return '{: .2f}'.format(current_value.get())
def slider_changed(event):
value_label.configure(text=get_current_value())
# label for the slider
slider_label = ttk.Label(
root,
text="Slider:"
)
slider_label.grid(
column=0,
row=0,
sticky='w'
)
# slider
slider = ttk.Scale(
root,
from_=0,
to=100,
orient="horizontal", # vertical
command=slider_changed,
variable=current_value
)
slider.grid(
column=1,
row=0,
sticky='we'
)
# current value label
current_value_label = ttk.Label(
root,
text="Current Value:"
)
current_value_label.grid(
row=1,
columnspan=2,
sticky='n',
ipadx=10,
ipady=10
)
# value label
value_label = ttk.Label(
root,
text=get_current_value()
)
value_label.grid(
row=2,
columnspan=2,
sticky='n'
)
root.mainloop()
Выход:

