2011-02-03 10 views
0

wx.TextCtrlを使用して型付きキーイベントをキャッチし、型付けされたキーをサブプロセスのstdinに直接転送しようとしています。私の特別な目的のために、 はTextCtrlのテキスト編集機能を完全に無効にします。つまり、文字を入力すると、 文字がTextCtrlに表示されず、直接転送されます。
ここに私が欲しいものを説明するためのコードがあります。TextCtrlのkey/charイベントをキャッチし、サブプロセスのstdinに型付きキーを転送

# inside the main frame 
    self.text = wx.TextCtrl(self.panel, wx.ID_ANY, style=wx.TE_MULTILINE) 
    self.text.Bind(wx.EVT_KEY_DOWN, self.OnKey) 
    self.text.Bind(wx.EVT_CHAR, self.OnChar) 
# ... 

def OnKey(self, evt): 
    keycode = evt.GetKeyCode() 
    # ENTER 

    if keycode == 13: 
     self.subprocess.stdin.read("\n") 
    if keycode == 9: 
     self.subprocess.stdin.read("\t") 
    if keycode == 8: 
     self.subprocess.stdin.read("\b") 
    if keycode == 316: 
     pass # maybe some key will be ignored 
    else: 
     evt.skip() 

def OnChar(self, evt): 
    key=chr(keycode)     
    self.subprocess.stdin.read(key) 

私は干渉しTextCtrlをさせることなく、標準入力に、など、すべてのキー入力イベントを転送する "ENTER"、 "TAB"、 "BACKSPACE"、文字、数字にしたいです。それを行う良い方法はありますか?あるいは、明示的に各キーを1つずつ一致させる必要がありますか?

ありがとうございました!

+0

テキスト編集をしたくない場合は、なぜTextCtrlを使用しますか? StaticTextはあなたが望むものに近いと思われます。 – ravenspoint

答えて

0

あなたは文字のキーコードを変換するために、これを行うことができます。

chr(keycode) 

入り、タブのように、しかし、すべてを取得することはできません。あなたは事例ベースでそれを処理しなければならないでしょう(あなたの例のように)。そうしないと、文字のマッピングにキーコードの辞書を作成する必要があります:あなたはまた、wx.TE_PROCESS_ENTERとwx.TE_PROCESS_TABでプレイすることをお勧めします

codemap = {97:'a', 98:'b', 8:'\b'} # Fill this out 
self.subprocess.stdin.read(codemap[keycode]) 

。入力キーとタブキーをテキストとしてキャプチャすることを有効/無効にします。

関連する問題