2016-08-31 27 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:// stackoverflowのご例えば、それはこのような何かを行うこととなるので、 .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) 
関連する問題