Ярлыки Tkinter в контекстном меню в Windows

#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 ярлык для проверки элементов на веб-странице. Вы должны сначала открыть меню, чем использовать ярлык. Это всего лишь пример.