2016-08-31 1 views
1

나는 textCTRL (wxPython을)이 호출 방법 : 내가 원하는대로 내가 원하는수동 이벤트가 바인딩과 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: in method 'PostEvent', expected argument 2 of type 'wxEvent &'

:

self.x.GetEventHandler().ProcessEvent(wx.EVT_KILL_FOCUS) 

잘 작동하지 않는.

+1

의 사용 가능한 복제 [wxPython을 : 이벤트를 수동으로 호출 (HTTP : // 유래하여, 예를 들어,이 같은 것을 할 것입니다 그래서 .com/questions/747781/wxpython-calling-an-event-manually) –

+0

@SergeyGornostaev 내 질문을 읽어 보셨습니까? 내 질문에이 주제를 게시하고 거기에 대한 답변이 작동하지 않으며 오류를 설명했다. – ban

답변

0

wx.EVT_KILL_FOCUS과 같은 항목은 여기에 필요한 이벤트 개체가 아닙니다. 그것들은 wx.PyEventBinder의 인스턴스이며, 이름에서 알 수 있듯이 이벤트를 핸들러에 바인딩하는 데 사용됩니다. PostEvent 또는 ProcessEvent 함수에 필요한 이벤트 객체는 이벤트 처리기 함수에서 수신하는 것과 동일한 객체 유형입니다. 이 경우 wx.FocusEvent의 인스턴스가됩니다.

이벤트 객체를 만들 때 해당 이벤트 클래스가 두 가지 이상의 이벤트 유형과 함께 사용되는 경우 이벤트 유형을 설정해야 할 수도 있습니다. 바인더 개체에는 사용할 값을 알 수있는 값이 있습니다. 또한 일반적으로 ID를 이벤트가 발생한 창의 ID로 설정해야합니다.

evt = wx.FocusEvent(wx.EVT_KILL_FOCUS.evtType, self.x.GetId()) 
wx.PostEvent(self.x.GetEventHandler(), evt) 
... 나 ...

self.x.GetEventHandler().ProcessEvent(wx.EVT_KILL_FOCUS)