我有一个 wx.TextCtrl,我希望能够在其中输入内容,同时也检测按键操作,例如 UP、DOWN、RETURN、ESC。
因此,我绑定(bind)了 wx.EVT_KEY_DOWN 来识别任何按键,并绑定(bind)了 wx.EVT_CHAR_HOOK 来执行相同的操作,即使 TextCtrl 具有焦点也是如此。
self.Bind(wx.EVT_KEY_DOWN, self.keyPressed)
self.Bind(wx.EVT_CHAR_HOOK, self.keyPressed)
按键 UP、DOWN、RETURN、ESC 已被识别并且工作正常,但由于绑定(bind) EVT_CHAR_HOOK,当我在 TextCtrl 中键入时,我无法再使用左右退格键。
有什么建议吗?
最佳答案
您应该在事件处理程序末尾调用 event.Skip()
以进一步传播它。这对我有用:
import wx
class MainWindow(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.panel = wx.Panel(self)
self.text = wx.TextCtrl(self.panel)
self.text.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.text.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
self.sizer = wx.BoxSizer()
self.sizer.Add(self.text, 1)
self.panel.SetSizerAndFit(self.sizer)
self.Show()
def OnKeyDown(self, e):
code = e.GetKeyCode()
if code == wx.WXK_ESCAPE:
print("Escape")
if code == wx.WXK_UP:
print("Up")
if code == wx.WXK_DOWN:
print("Down")
e.Skip()
def OnKeyUp(self, e):
code = e.GetKeyCode()
if code == wx.WXK_RETURN:
print("Return")
e.Skip()
app = wx.App(False)
win = MainWindow(None)
app.MainLoop()
关于python - wxPython:绑定(bind)wx.EVT_CHAR_HOOK禁用TextCtrl退格键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20416650/