Когда Tkinter обнаруживает измененное событие щелчка, такое как <Shift-Button-1>
, <Control-Button-1>
и т. Д., Есть ли способ «заглушить» клавишу-модификатор и обработать ее как просто <Button-1>
вместо этого?
Единственный подход, который я могу придумать - который не работает для моего варианта использования - это создать привязки событий для различных модификаторов, а затем направить их всех на обратный вызов, который запускает неизмененное событие. Например.,
import Tkinter as tk
root = tk.Tk()
lst = tk.Listbox(root,selectmode=tk.EXTENDED)
[...geometry setup...]
def clickOnly(*args):
lst.event_generate('<Button-1>')
lst.bind('<Shift-Button-1>',clickOnly)
lst.bind('<Control-Button-1>',clickOnly)
[...other related bindings...]
tk.mainloop()
Когда я запускаю этот код, нажатие клавиши shift и т. Д. Перехватывается обратным вызовом, но результаты поведения отличаются от того, что будет делать обычный щелчок. Например. Shift-click привязывается к элементу с индексом 0 и по-прежнему выбирает несколько элементов вместо только одного.
Руководство о том, как исправить мой подход, было бы хорошо, но я действительно надеюсь, что кто-то может указать мне на другой, более чистый подход - какой-то более прямой способ, позволяющий рассматривать сдвиги, управление и другие модификаторы так, как если бы они всегда были ложными.
(Среда - Python 2.7.x, работающая в Windows 7/10.)
РЕДАКТИРОВАТЬ: Я пытаюсь сделать это так:
- Пользователь указывает и щелкает: поведение по умолчанию
- Точки пользователя и нажатия на клавишу Shift: Shift игнорируется, поведение по умолчанию для щелчка
- Точки пользователя и управляющие щелчки: управление игнорируется, поведение по умолчанию для щелчка
- Точки пользователя и alt-клики: Alt игнорируется, поведение по умолчанию для клика
- (вы поняли)
т.е. Есть ли способ заставить Tkinter игнорировать модификаторы?