将子窗口小部件的关键事件重定向到其父窗口小部件

时间:2011-06-14 07:26:36

标签: wxpython

是否有某种方法将所有子窗口小部件的关键事件重定向到wxpython中其父帧的关键事件,以便可以在单个方法中捕获所有关键事件?

1 个答案:

答案 0 :(得分:3)

您的子课程只需使用wx.PostEvent将您的父窗口小部件作为目标发布。然后您的父窗口小部件可以将事件绑定到其事件处理程序。如果您需要知道事件来自哪个窗口小部件,可以在事件上调用GetName()。这是一个小例子。

import wx

class ChildWidget(wx.TextCtrl):

    def __init__(self, parent, name, pos):
        super(ChildWidget, self).__init__(parent, name=name, pos=pos)
        self.parent = parent
        self.Bind(wx.EVT_KEY_DOWN, self.keyPressed)

    def keyPressed(self, event):
        wx.PostEvent(self.parent, event)

class MainWidget(wx.Frame):

    def __init__(self, parent, title):
        super(MainWidget, self).__init__(parent, title=title)

        self.child1 = ChildWidget(self, name="Child1", pos=(0,0))      
        self.child2 = ChildWidget(self, name="Child2", pos=(100,0))

        self.Bind(wx.EVT_KEY_DOWN, self.ChildKeyPressed)

        self.Layout()

    def ChildKeyPressed(self, event):
        print "Keypress from " + event.GetEventObject().GetName()


if __name__ == '__main__':
    app = wx.App(redirect=False)
    frame = MainWidget(None, "test")
    frame.Show(True)
    app.MainLoop()