【发布时间】:2011-02-03 14:19:44
【问题描述】:
我正在尝试使用 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”、字符、数字等,所有的按键输入事件转发到stdin,不让TextCtrl干扰。有什么好的方法吗?或者我必须一个一个地明确匹配每个键?
感谢您的任何建议!
【问题讨论】:
-
如果你不想编辑文本,为什么要使用TextCtrl? StaticText 似乎更接近您想要的。
标签: python user-interface wxpython wxwidgets keyboard-events