2

我正在编写的程序中的快捷方式用完了,而且其中有很大一部分我发现无法启用。我开始认为它可能与操作系统或桌面相关,所以我告诉你我在 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-number 快捷方式有问题,但让我们从这里开始)。

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

1..6 的示例输出为:

1:按下“1”

2:按下''

3:按下'\x1b'

4:按下'\x1c'

5:按下'\x1d'

6:测试成功,按下'\x1e':控制键6

我还尝试将快捷方式绑定到 root,并执行return 'break',但没有任何效果。

你有什么主意吗?

谢谢!

4

1 回答 1

4

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

首先,key函数应该使用keysymmember 而char不是event

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

那么你的绑定函数应该只使用这个key函数,不需要那个 lambda。你也应该 bind <Control-Key-1>, not <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)

希望这可以帮助。

于 2012-12-14T11:04:40.750 回答