2012-12-14 107 views
2

我正在編寫程序中的快捷方式已用盡,並且存在一大堆我無法啓用的子集。 我開始認爲它可以與操作系統或桌面相關,所以我告訴你,我正在KDE下運行Fedora Linux。無法啓用tkinter快捷鍵

這是小PROG我用它來探索我的鑰匙問題:

#!/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

我也嘗試綁定到根的快捷方式,也做了返回'休息',但沒有任何工作。

你有什麼想法嗎?

謝謝!

回答

4

這裏有一些修正你的代碼,這使得它的工作:

首先,在key函數應使用keysym成員,而不是charevent的:

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) 

希望這有助於。

+0

我感到非常尷尬......但我很困惑的事實,我寫的所有信函綁定完美地工作! – alessandro