无法启用的 tkinter 快捷方式



我正在编写的程序中的快捷方式用完了,并且我发现其中很大一部分无法启用。我开始认为它可以与操作系统或桌面相关,所以我告诉你我正在运行 KDE 下的 Fedora Linux。

这是我用来探索我的关键问题的小程序:

#!/usr/bin/env python   
from Tkinter import *    
root = Tk()
text=Text(root)    
text.pack(side=LEFT, fill=BOTH, expand = YES)
def key(event):
    print "pressed", repr(event.char)
def testfun(a):
    print"test worked, pressed %s: control key %s" % (repr(event.char),str(a))  
text.bind("<Key>", key)
for i in range(10):
    text.bind('<Control-'+str(i)+'>',  lambda event,arg=i:testfun(arg,event))
mainloop()

(我只对 ctrl 号快捷键没有问题,但让我们从这里开始)。

我的问题:按 Ctrl-6...Ctrl-0 被截获,但我找不到制作 Ctrl-1 的方法。Ctrl-5!

1..6 的示例输出为:

1

:按"1"

2:按"

3:按"\x1b"

4:按"\x1c"

5:按"\x1d"

6

:测试工作正常,按"\x1e":控制键6

我还尝试将快捷方式绑定到 root,并执行返回"中断",但没有任何效果。

你有什么想法吗?

谢谢!

以下是对代码的一些修复,使其正常工作:

首先,key函数应该使用keysym成员而不是event char

def key(event):
    print "pressed", repr(event.keysym)

然后,您的绑定函数应该只使用 key 函数,不需要该 lambda。此外,您应该绑定<Control-Key-1>,而不是<Control-1>,(后者是指缪斯按钮),因此:

for i in range(10):
    text.bind('<Control-Key-'+str(i)+'>',  key)

您可以擦除该行:

#text.bind("<Key>", key)

您也可以像这样绑定小写字母:

for i in range(ord('a'), ord('z') + 1):
    text.bind('<Control-Key-'+chr(i)+'>',  key)

希望这有帮助。

最新更新