Ползунки («scales» или «sliders») используются для выбора значения из диапазона чисел. Перемещение ползунка с помощью перетаскивания или щелчка мышью изменяет значение виджета в диапазоне целых чисел и запускает обработчик, если он зарегистрирован.
Подобно флажкам и переключателям ползунки обладают параметром command для регистрации управляемого событиями обработчика, выполняемого немедленно при перемещении ползунка, а также параметром variable для связи с переменной tkinter, которая позволяет в любой момент времени получить или установить положение ползунка. Обрабатывать значение можно сразу же после его установки или позже.
Кроме того, у ползунков есть третий способ обработки — методы get и set, с помощью которых можно непосредственно обращаться к значению виджета, не связывая с ним переменную. Поскольку обработчики, регистрируемые с помощью параметра command, получают текущее значение ползунка в качестве аргумента, часто этого достаточно, чтобы не прибегать к связанным переменным или вызовам методов get/set.
Для иллюстрации основ применения этого элемента в примере 8.30 приводится сценарий, который создает два ползунка — горизонтальный и вертикальный, связанные между собой через ассоциированную переменную, что позволяет их синхронизировать.
Пример 8.30. PP4E\Gui\Tour\demoScale.py
“создает два связанных ползунка для запуска демонстрационных диалогов”
from tkinter import * # импортировать базовый набор виджетов
from dialogTable import demos # обработчики событий
from quitter import Quitter # прикрепить к “себе” объект Quitter
class Demo(Frame):
def __init__(self, parent=None, **options): Frame.__init__(self, parent, **options) self.pack()
Label(self, text=”Scale demos”).pack() self.var = IntVar()
Scale(self, label=’Pick demo number’,
command=self.onMove, # перехватывать перемещения
variable=self.var, # отражает положение
from_=0, to=len(demos)-1).pack()
Scale(self, label=’Pick demo number’, command=self.onMove, # перехватывать перемещения
variable=self.var, # отражает положение
from_=0, to=len(demos)-1, length=200, tickinterval=1, showvalue=YES, orient=’horizontal’).pack()
Quitter(self).pack(side=RIGHT)
Button(self, text=”Run demo”, command=self.onRun).pack(side=LEFT)
Button(self, text=”State”, command=self.report).pack(side=RIGHT)
def onMove(self, value): print(‘in onMove’, value)
def onRun(self):
pos = self.var.get() print(‘You picked’, pos) demo = list(demos.values())[pos] # отображение позиции на ключ
# (представление в версии 3.X) print(demo()) # или
# demos[ list(demos.keys())[pos] ]() def report(self):
print(self.var.get())
if __name__ == ‘__main__’: print(list(demos.keys())) Demo().mainloop()
Кроме доступа к значениям и регистрации обработчиков у ползунков имеются параметры, соответствующие понятию диапазона выбираемых значений, большинство из которых продемонстрировано в этом примере:
• Параметр label позволяет определить текст, появляющийся рядом со шкалой, параметр length позволяет определить начальный размер в пикселях, а параметр orient — направление.
• Параметры from_ и to позволяют определить минимальное и максимальное значения шкалы (обратите внимание, что from в языке Python является зарезервированным словом, а from_ — нет).
• Параметр tickinterval позволяет определить количество единиц измерения между отметками, наносимыми рядом со шкалой через равные интервалы (значение 0 по умолчанию означает, что отметки не выводятся).
• Параметр resolution позволяет определить количество единиц, на которое изменяется значение ползунка при каждом перетаскивании или щелчке левой кнопки мыши (по умолчанию 1).
• Параметр showvalue позволяет определить, должно ли отображаться текущее значение рядом с ползунком (по умолчанию showvalue=YES, то есть отображается).
Обратите внимание, что ползунки тоже прикрепляются к своим контейнерам, как и прочие виджеты tkinter. Посмотрим, как эти параметры используются на практике. На рис. 8.30 изображено окно, создаваемое этим сценарием в Windows 7 (в Unix и Mac получается аналогичная картина).
Рис. 8.30. Сценарий demoScale в действии
Для наглядности кнопка State выводит текущие значения ползунков, a Run demo — запускает те же стандартные диалоги, используя целочисленные значения ползунков в качестве индекса таблицы demos. Сценарий также регистрирует обработчик command, который вызывается при каждом перемещении ползунка по любой из шкал и выводит новые значения ползунков. Ниже приводятся сообщения, отправленные в поток stdout после нескольких перемещений, с информацией о запускаемых демонстрационных диалогах (курсив) и о значениях ползунка (полужирный):
C:\…\PP4E\Gui\Tour> python demoScale.py [‘Color’, ‘Query’, ‘Input’, ‘Open’, ‘Error’] in onMove 0 in onMove 0 in onMove 1 1 in onMove 2
You picked 2 123.0
in onMove 3
3
You picked 3
C:/Users/mark/Stuff/Books/4E/PP4E/dev/Examples/PP4E/Launcher.py
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011