wxPython:绑定wx.EVT_CHAR_HOOK禁用TextCtrl退格



我有一个wx。TextCtrl和我希望能够在其中键入,还可以检测按键,如UP、DOWN、RETURN、ESC。

所以我绑定了wx。EVT_KEY_DOWN以识别任何按键,以及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,并且工作正常,但由于绑定了EVT_CHAR_HOOK,当我键入TextCtrl时,我不能再使用LEFT RIGHT BACKSPACE SHIFT。

有什么建议吗?

您应该在事件处理程序结束时调用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()

相关内容

  • 没有找到相关文章

最新更新