Привязка кнопок к нажатию Alt?

У меня есть простое приложение 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.

Спасибо.

5
задан Demosthenex 10 February 2012 в 18:40
поделиться