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

发布于 2024-11-15 05:16:25 字数 74 浏览 1 评论 0原文

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

Is there someway of redirecting the key events of all child widgets to the key events of their parent frame in wxpython so that all the key events can be caught in a single method?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

静若繁花 2024-11-22 05:16:25

您的子类只需使用 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()

Your child classes just need to post the event with your parent widget as a target using wx.PostEvent. Then your parent widget can bind the event to its event handler. If you need to know which widget the event came from, you can call GetName() on the event. Here is a small example.

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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文