Программирование полос прокрутки

programmirovanie polos prokrutki Экскурсия по tkinter, часть 2

Однако самое большое таинство в примере 9.9 свершается в следующих двух строках:

sbar.config(command=list.yview) # вызвать list.yview при перемещении list.config(yscrollcommand=sbar.set) # вызвать sbar.set при перемещении

С помощью этих параметров настройки производится связывание полосы прокрутки и окна списка — их значения просто ссылаются на связанные методы друг друга. Благодаря такому соединению библиотека tkinter автоматически синхронизирует два виджета при перемещениях в них. Вот как это действует:

     Перемещение полосы прокрутки вызывает обработчик, зарегистрированный с помощью ее параметра command. Здесь list.yview ссылается на встроенный метод виджета списка, который пропорционально настраивает отображение списка, исходя из аргументов, переданных обработчику.

     При вертикальном перемещении в окне списка вызывается обработчик, зарегистрированный в его параметре yscrollcommand. В данном сценарии встроенный метод sbar.set пропорционально настраивает полосу прокрутки.

Иными словами, прокрутка в одном виджете автоматически вызывает прокрутку в другом. В tkinter у всех прокручиваемых элементов — Listbox, Entry, Text и Canvas — есть встроенные методы yview и xview для обработки прокрутки по вертикали и по горизонтали, а также параметры yscrollcommand и xscrollcommand, в которых определяются обработчики связанной с ними полосы прокрутки. У полос прокрутки есть параметр command, в котором указывается обработчик, вызываемый при прокрутке. Библиотека tkinter передает этим методам информацию, определяющую новое положение (например, «прокрутить вниз на 10%»), но программисту не требуется опускаться в сценариях до таких деталей.

Так как полоса прокрутки и окно списка взаимно связаны путем установки их параметров, при перемещении движка полосы прокрутки автоматически происходит прокрутка содержимого списка, а при прокрутке содержимого списка автоматически перемещается движок в полосе прокрутки. Чтобы выполнить перемещение с помощью полосы прокрутки, нужно перетащить ее движок либо щелкнуть на стрелке или в пустой области. Чтобы выполнить прокрутку в списке, следует щелкнуть на нем и использовать клавиши со стрелками или переместить указатель мыши выше или ниже окна, не отпуская кнопки мыши. В обоих случаях список и полоса прокрутки двигаются в унисон. На рис. 9.15 показано, что произойдет после перемещения в списке на несколько элементов вниз тем или иным способом.

Рис. 9.15. Прокрутка до середины списка

 

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий