Может ли tkinter обрабатывать колесо мыши вперед и назад отдельно? - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь запрограммировать простое увеличение и уменьшение масштаба, используя холст на tkinter, большую часть работы я проделал, но меня остановила проблема: при привязке события с помощью master.bind(<Control-MouseWheel>, func) я могу Не обрабатывайте по-разному событие колесика мыши и событие назад. Есть ли какое-нибудь решение?

PS При связывании события я был вынужден использовать master.bind(<Control-MouseWheel>, lambda func: "other code"), в противном случае при запуске программы функция привязки к событию была запущена мгновенно, какое-либо решение для этой другой проблемы?

1 Ответ

2 голосов
/ 14 марта 2020

Объект события имеет атрибут с именем delta, который сообщает, сколько единиц нужно переместить. delta может быть положительным (двигаться вперед) или отрицательным (двигаться назад).

def func(event):
    if event.delta > 0:
        print("scroll forward")
    else:
        print("scroll backward")

Из канонической документации:

Значение delta представляет единицы поворота колеса мыши. В системах Windows 95 и 98 наименьшее значение для дельты равно 120. Будущие системы могут поддерживать более высокие значения разрешения для дельты. Знак значения указывает направление прокрутки колесика мыши.

В системах windows и * nix обычно требуется разделить дельту на 120 (или какое-либо другое значение, в зависимости от того, как быстро вы хотите увеличить), если вы хотите использовать значение, чтобы определить, сколько прокручивать или масштабировать. В OSX вы можете использовать необработанные значения дельты.

Полный пример масштабирования с помощью колеса мыши см. В этом ответе на вопрос Tkinter canvas zoom + move / pan

...