#python #python-3.x #windows #tkinter #contextmenu
#python #python-3.x #Windows #tkinter #contextmenu
Вопрос:
У меня a есть меню, которое я отображаю как контекстное меню в tkinter
приложении:
rmenu = tk.Menu(None, tearoff=0, takefocus=0)
# add some commands here
rmenu.add_command(label="Copy", copyfunction, accelerator="Shift-C")
rmenu.bind("<Shift-KeyPress-C>", copyfunction) # this doesn't work on windows!
Я определяю ярлык для команды в этом контекстном меню, а затем, когда я пытаюсь запустить команду, набрав <Shift>
<C>
в Windows, это не работает. На самом деле, я получаю звуковой сигнал.
Есть ли способ определить ярлык в этой ситуации?
Обновить:
Я даже пытался сгенерировать событие в программе, используя:
rmenu.event_generate("<Shift-KeyPress-C>", when="tail")
Но функция copyfunction
не была вызвана.
PS: Это работает в Linux
Ответ №1:
bind
сочетание клавиш для root
. Только вещи с focus
прослушиванием привязок клавиш. Как часто контекстное меню имеет фокус? При использовании bind_all
на root
, все, что имеет focus
, вызовет привязку ключа.
root.bind_all("<Shift-C>", copyfunction)
Комментарии:
1. На самом деле меню получает фокус сразу после создания, затем пользователь может щелкнуть по нему с помощью мыши или использовать ярлык. Я пытался
bind_all
, но все еще получаю звуковые сигналы! Я думаю, что это не проблема с фокусом.2. @ThunderPheonix ~ Итак, вы действительно хотите открыть меню перед использованием ярлыка?
3. Я не думаю, что вы можете сделать это в Windows. «Звон», по сути, говорит «Я не могу этого сделать, пока это меню открыто». Обычно назначение сочетания клавиш заключается в том, чтобы вам не приходилось открывать меню. Я не могу вспомнить ни одной программы, которая ожидала бы, что вы откроете меню перед использованием сочетания клавиш.
4. Например, в Firefox у вас есть
Q
ярлык для проверки элементов на веб-странице. Вы должны сначала открыть меню, чем использовать ярлык. Это всего лишь пример.