У меня есть простое приложение Tkinter, которое я написал, с несколькими кнопками в нижней части формы. Моя цель - следовать стандартному соглашению: выделить букву на кнопке и привязать действие для этой буквы к клавише Alt (т.е. Alt-s для "_S_ave").
Я пробовал сделать привязку корневого окна к "Alt-s", "Alt-KeyPress-s" и "Mod1-s", но ни одна из них не работает надежно. Иногда они срабатывают, но даже если в моей функции событий стоит "return break", буква "s" передается виджету ввода.
Я полагаю, что это проблема Linux/X11 и Mod1 против обработки Alt, потому что привязки клавиш Control работают стабильно. Я не смог найти никаких лучших практик для решения этой проблемы, поэтому обращаюсь сюда.
Может кто-нибудь поделиться, как заставить привязку клавиши Alt работать в Linux/X11?
** Обновлено с примером
from Tkinter import *
class GUI:
def __init__(self,root):
self.root = root
e = Entry(self.root)
e.grid(column=0,row=0)
b = Button(self.root, text="Save", underline = 0)
b.grid(column=0,row=1)
root.bind("",self.save)
e.focus()
def save(self,event=None):
print("Hey, you pressed Alt-s!")
return "break"
root = Tk()
App = GUI(root)
print("At this point, pressing Alt-s places the s string in the entry widget, and doesn't trigger")
root.mainloop()
** Обновление 2
Несколько рецензентов сообщили мне, что это работает в их системах, даже в Linux. Возможно, есть проблема с моим tiling wm или другой конфигурацией для X11, однако у меня не было проблем с использованием Alt в других приложениях с графическим интерфейсом X11.
Я открыт для предложений по устранению неполадок.
** Обновление 3
Я проанализировал поведение xmodmap, и оказалось, что когда я назначаю Alt_R, привязка клавиш Tk перестает работать. События, о которых сообщает xev, совпадают дословно, но поведение Tk меняется. Продолжаю копать.
** Обновление 4
Мистер Ланге в списке Tkinter нашел ссылку, которая помогает объяснить подобное поведение, на https://bbs.archlinux.org/viewtopic.php?id=58145 .
Я внес это изменение в свой xmodmap, и теперь Alt работает как ожидалось. Я не могу объяснить, почему привязка Alt_R к mod4 влияет на Alt_L, или почему это влияет только на приложения Tk.
Спасибо.