【发布时间】:2011-06-14 07:26:36
【问题描述】:
有没有办法在 wxpython 中将所有子小部件的键事件重定向到其父框架的键事件,以便可以在一个方法中捕获所有键事件?
【问题讨论】:
标签: wxpython
有没有办法在 wxpython 中将所有子小部件的键事件重定向到其父框架的键事件,以便可以在一个方法中捕获所有键事件?
【问题讨论】:
标签: wxpython
您的子类只需要使用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()
【讨论】: