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

问题描述

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

解决方法

        您的子班级只需要使用ѭ0to发布事件,并将您的父级窗口小部件作为目标。然后,您的父窗口小部件可以将事件绑定到其事件处理程序。如果您需要知道事件来自哪个窗口小部件,可以在事件上调用ѭ1。这是一个小例子。
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,title):
        super(MainWidget,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()
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...