2016-05-24 15 views
1

私はタスクのためにIDLEを使用していたときにこれを最初に気付きましたが、自分自身のtkinterプログラムにも表示されます。多くのキーボードには、スペースバーの行の横にある通常の矢印キーと、キーパッドの矢印キーの2組の矢印キーがあります。これは、numlockがオンになっているときに番号入力キーとして機能します。 tkinterでは、2つのセットが押されると、異なるイベント名が生成されます。他の矢印キーと同じようにnumpadの矢印を扱うようにする

私の問題は、TextやEntryなどのさまざまな組み込みのtkinterウィジェットを使用すると、デフォルトのtkinterの動作がキーパッドイベントを無視するように見えるということです。私のプログラムは両方のセットを同じように扱いたいと思っています。

私はそれをインポートした後に変数を設定するか、KP_ *イベントを関数にバインドして対応する通常の矢印キーイベントをmyに戻すなど、比較的簡単な方法で実装したいと考えていますウィジェット。しかし、私が発見した唯一のことは、このクールークの存在を認めてさえも、this、他の、答えられていない、Stack Overflowの質問です。

+0

10キーが押されたときに、キーの上矢印は「KP_Up」のようなもので、通常の上矢印は単にevent.keysymの「上」です。これはあなたに良い答えを探すのに十分なことを願っています。 keysymとkeycodesのリストは、p65と66(フランス語)のhttp://ateliers.mse.free.fr/tkinter/tkinter-ref5.pdf –

+0

にあります。例えば、複数のキーイベントをEntryにバインドすることができます同じ機能に任意のキーイベントをキャプチャし、プログラムが応答するイベントをフィルタすることもできます。簡単な例が役に立ちます。テキストの1行上に10個の上向きの矢印キーが必要な場合は、自分でプログラムする必要があります。つまり、カーソルを1行上に移動する必要があります。 –

+0

ありがとうございます、私はKP_arrow対矢印イベント名を認識しています。ウィジェットの内部状態にアクセスする方法について別の質問(質問する前に調べる必要があります)につながりますが、私はウィジェット状態の変更についてプログラミングを検討しました。 – Nick

答えて

0

もう少し掘り下げてから、イベントを別のイベント名に転送するためにこの関数を作成しました。おそらく、潜在的な改善がいくつかありますが、これは一般的な考え方です。

イベントを再マッピングするウィジェットでこの関数が呼び出され、ルートウィジェットでそれを呼び出すと、他のウィジェットにバインドされていない他のすべてのウィジェットのイベントが再マッピングされます。

kmap変数を使用して、どのイベントが他のどのイベントに変換されるかを変更できます。そうした場合、転送にループがないことを確認してください。この機能は健全性チェックをゼロにします。

ここで元のイベントの修飾キーの状態をコピーしたのは、これで十分でしたが、状況によってはさらに情報をコピーする必要があります。

Python docs for tkinterのリンクからkey event informationが見つかりました。私はevent_generate()event property informationを同じソースから入手しました。

このソリューションは、私の単純な問題のために働いていましたが、より複雑な状況に適用すると、はるかに注意する必要があることに注意してください。

def fix_keypad(widget): 
    kmap = { 
     '<KP_Left>': '<Left>', 
     '<KP_Right>': '<Right>', 
     '<KP_Up>': '<Up>', 
     '<KP_Down>': '<Down>', 
     '<KP_Home>': '<Home>', 
     '<KP_End>': '<End>', 
     '<KP_Next>': '<Next>', 
     '<KP_Prior>': '<Prior>', 
     '<KP_Enter>': '<Return>', 
    } 
    for i in kmap: 
     def mfunc(event, key=i): 
      widget.event_generate(kmap[key], **{'state': event.state}) 
     widget.bind(i, mfunc) 
関連する問題