是否有某种方法将所有子窗口小部件的关键事件重定向到wxpython中其父帧的关键事件,以便可以在单个方法中捕获所有关键事件?
答案 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()