2

作成しているプログラムのショートカットが不足していて、それらのサブセットの大部分を有効にできないと感じています。私はそれがOSまたはデスクトップに関連している可能性があると考え始めているので、私はKDEの下でFedoraLinuxを実行していると言います。

これは、キーの問題を調査するために使用する小さなプログラムです。

#!/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関数は:の代わりにmemberを使用する必要がありkeysymます:charevent

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

次に、バインディング関数は単に関数を使用するkey必要があり、そのラムダは必要ありません。また、(後者はミューズボタンを指します)では<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)

お役に立てれば。

于 2012-12-14T11:04:40.750 に答える