我已经写了一个简单的Tkinter应用程序,在窗体底部有几个按钮。我的目标是按照在按钮上加下划线的标准惯例,并使用Alt键(即:“_S_ave”的Alt-s)绑定该字母的动作。将按钮绑定到Alt按键?
我试着将一个根窗口绑定到“Alt-s”,“Alt-KeyPress-s”和“Mod1-s”,并且没有一个可以可靠地工作。他们有时会开火,但即使我对事件功能有“返回休息”,“s”字母也会传播到输入窗口小部件。
我相信这是Linux/X11和Mod1与Alt处理的问题,因为控制键绑定工作一致。我一直无法找到任何解决此问题的最佳实践,因此我在此提出上诉。
有人可以分享如何获得在Linux/X11工作的Alt键绑定?
**与样本
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("<Alt-s>",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的工作。也许我的平铺WM或X11的其他配置存在问题,但是我在使用Alt与任何其他X11 GUI应用程序时没有问题。
我接受关于如何解决此问题的建议。
**更新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应用程序。
谢谢。
怎么样的一个片段,我们可以尝试在那里ALT不工作对于? – 2012-02-05 21:47:02
我以为我会指出我正在使用平铺WM AwesomeWM,并有权修改xmodmap到其他东西,但左侧未经修改。 Emacs,Firefox,Openoffice和其他GUI应用程序通常会读取Alt键。 – Demosthenex 2012-02-06 03:51:49
你的代码在python 2.7.1的windows XP下工作正常。对不起,我再也无法提供帮助了,我手边没有一台linux机器。 :/ 祝你好运。 – Symon 2012-02-06 20:23:21