Активировать другие виджеты при перетаскивании мышью - PullRequest
2 голосов
/ 09 июня 2011

У меня несколько строк Tkinter.labels подряд, и я хотел бы, чтобы пользователь мог щелкать и перетаскивать свою мышь над каждым из них, активируя их в процессе.

Я знаю о привязках, но мне нужно несколько событий в одной привязке. Я возился с <Button-1> и <Enter>, однако мне нужен обратный вызов только тогда, когда оба истинны.

Я знаю, l.bind('<Button-1>,<Enter>', ...) недействительно.

Кто-нибудь с большим опытом работы с Tkinter знает способ связывания цепочек или создания мульти-связывания ??

1 Ответ

2 голосов
/ 09 июня 2011

Способ решения этой конкретной проблемы - привязка к ButtonPress и ButtonRelease, которая устанавливает флаг. Затем в привязке для <Enter> (или любого другого события) вы проверяете этот флаг.

Однако, пока кнопка нажата, вы не получите никаких событий <Enter>. Это потому, что виджет, на который вы щелкнули, захватывает указатель и владеет им, пока вы не отпустите кнопку. Единственные события <Enter>, которые вы получите при нажатии кнопки, - это когда вы входите в виджет, на котором изначально щелкнули.

То, что вы хотите сделать вместо этого, это привязать к <B1-Motion>. Затем вы можете использовать координаты x / y события и winfo_containing, чтобы определить, над каким виджетом вы находитесь.

При этом попытка смоделировать выделение по ряду меток - это большая работа, приносящая очень мало пользы. Почему бы просто не использовать текстовый виджет, в котором уже есть выделение? Вы можете настроить его так, чтобы он выглядел как набор меток (т.е. сделать фон того же цвета, что и у рамки), и вы можете отключить редактирование. Это может быть более простой путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...