Я пытаюсь использовать wx.TextCtrl для перехвата событий набранных клавиш и напрямую перенаправить набранный ключ в стандартный ввод подпроцесса.Обратите внимание, что для моей специальной цели я полностью отключу функцию редактирования текста TextCtrl.то есть, когда я набираю букву, она не будет отображаться в TextCtrl, она будет перенаправлена напрямую.
Вот код, иллюстрирующий то, что я хочу.
# 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)
Я хочу переслать "ENTER", "TAB", "BACKSPACE", символы, цифры и т. Д., Все события ввода с клавиатуры на стандартный ввод, не позволяя TextCtrl вмешиваться.Есть ли хороший способ сделать это?Или я должен точно сопоставить каждый ключ один за другим?
Спасибо за любые предложения!