0
有沒有辦法在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()
謝謝,它的工作原理。只是想知道是否有某種方法可以讓我做同樣的事情,而不必從我創建的每個小孩小部件中提取出來?就像,只是在父框架(或其他地方)中定義一次,現在無論添加多少個子部件,我仍然會在父部件中獲得keydown事件? – 2011-06-15 13:06:12
除非有什麼改變,我不認爲有。命令事件會自動傳播到父窗口小部件,但是關鍵事件不是其中之一。請參閱http://groups.google.com/group/wxpython-users/browse_thread/thread/b63a9893ad8bbc3d/4dc2c2eed8a2ca4f?lnk=gst&q=Key+event+propagation+changed+in+2.8#4dc2c2eed8a2ca4f上的討論 – 2011-06-15 13:57:40