我有textCTRL
(Wxpython)事件绑定到它:
self.x= wx.TextCtrl(self, -1, "")
self.x.Bind(wx.EVT_KILL_FOCUS, self.OnLeavex)
我想按照自己的意愿手动触发此事件。 我读了这个主题:wxPython: Calling an event manually但没有任何作用。
我试过了:
wx.PostEvent(self.x.GetEventHandler(), wx.EVT_KILL_FOCUS)
但它给出了:
TypeError:在方法' PostEvent'中,类型' wxEvent的预期参数2 &安培;'
我也尝试过:
self.x.GetEventHandler().ProcessEvent(wx.EVT_KILL_FOCUS)
哪个也不起作用。
答案 0 :(得分:0)
The things like wx.EVT_KILL_FOCUS
are not the event object needed here. Those are instances of wx.PyEventBinder
which, as the name suggests, are used to bind events to handlers. The event object needed for the PostEvent
or ProcessEvent
functions will be the same type of object as what is received by the event handler functions. In this case it would be an instance of wx.FocusEvent
.
When creating the event object you may also need to set the event type if that event class is used with more than one type of event. The binder object has that value to help you know what to use. You usually also need to set the ID to the ID of the window where the event originated. So for your example, it would be done something like this:
evt = wx.FocusEvent(wx.EVT_KILL_FOCUS.evtType, self.x.GetId())
wx.PostEvent(self.x.GetEventHandler(), evt)
...or...
self.x.GetEventHandler().ProcessEvent(wx.EVT_KILL_FOCUS)