我正在编写的程序中的快捷方式用完了,并且我发现其中很大一部分无法启用。我开始认为它可以与操作系统或桌面相关,所以我告诉你我正在运行 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)
希望这有帮助。