Scale

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

Scale представляет ползунок со шкалой, на которой можно выбрать одно из числовых значений.

Среди параметров Scale следует отметить следующие:

  • orient: направление виджета. Может принимать значения HORIZONTAL/"horizontal" и VERTICAL/"vertical"

  • from_: начальное значение шкалы виджета, представляет тип float

  • to: конечное значение шкалы виджета, представляет тип float

  • length: длина виджета

  • command: функция, которая выполняется при изменении текущего значения

  • value: текущее значение шкалы виджета, представляет тип float

  • variable: переменная IntVar или DoubleVar, к которой привязано текущее значение виджета

Простейший Scale в горизонтальной и вертикальной ориентации:

from tkinter import *
from tkinter import ttk

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

verticalScale = ttk.Scale(orient=VERTICAL, length=200, from_=1.0, to=100.0, value=50)
verticalScale.pack()

horizontalScale = ttk.Scale(orient=HORIZONTAL, length=200, from_=1.0, to=100.0, value=30)
horizontalScale.pack()

root.mainloop()
Виджет Scale в tkinter и python

Привязка к переменной

from tkinter import *
from tkinter import ttk

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

val = IntVar(value=10)

ttk.Label(textvariable=val).pack(anchor=NW)

horizontalScale = ttk.Scale(orient=HORIZONTAL, length=200, from_=1.0, to=100.0, variable=val)
horizontalScale.pack(anchor=NW)

root.mainloop()

В данном случае и метка Label, и виджет Scale привязаны к переменной val:

Виджет Scale и привязка к переменной IntVar в tkinter и python

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

Параметр command позволяет установить функцию, которая будет выполняться при изменении текущего значения Scale. В качестве параметра в эту функцию передается новое значение:

from tkinter import *
from tkinter import ttk

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

def change(newVal):
    label["text"] = newVal
    # или так
    # label["text"] = scale.get()

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

scale = ttk.Scale(orient=HORIZONTAL, length=200, from_=1.0, to=100.0, command=change)
scale.pack(anchor=NW)

root.mainloop()

В данном случае новое значение Scale передается в метку label:

Обработка изменения значения в виджете Scale в tkinter и python

Для получения текущего значения Scale можно использовать его метод get():

label["text"] = scale.get()

Стоит учитывать, что передаваемое в функцию значение newVal представляет строку, а точнее значение типа float в строковом виде. Но что делать, если мы хотим выводить в метке label не строку или даже float, а целое число? В этом случае необходимо выполнить цепь преобразований:

def change(newVal):
    float_value = float(newVal)     # получаем из строки значение float
    int_value = round(float_value)  # округляем до целочисленного значения
    label["text"] = int_value
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850