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つずつ一致させる必要がありますか?
ありがとうございました!
テキスト編集をしたくない場合は、なぜTextCtrlを使用しますか? StaticTextはあなたが望むものに近いと思われます。 – ravenspoint