python - wxPython:绑定(bind)wx.EVT_CHAR_HOOK禁用TextCtrl退格键

标签 python events wxpython keypress wxtextctrl

我有一个 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/

相关文章:

python ObjectListView 有一个不可编辑的列

python - 发布一个 wxPython 应用程序 : Give out scripts or compile in Exe, 等?

Python:具有共享参数的拟合矩阵方程

python - 从列表中删除重复项

c++ - 如何监听独立启动的Office应用程序的COM事件?

带有事件对象的 iOS 事件总线库?

python - 在wxpython中恢复Windows

python - Python exec 中的作用域

python - 我们可以使用哪个标记器来获取 future 的数据?代码是Python的

javascript - Angular 按键事件的问题