2016-08-31 4 views
1

Ich habe ein textCTRL (Wxpython) mit Ereignisbindung, um es aufzurufen:Wie man manuell WxPython Ereignis

self.x= wx.TextCtrl(self, -1, "") 
self.x.Bind(wx.EVT_KILL_FOCUS, self.OnLeavex) 

Ich möchte manuell lösen dieses Ereignis, wie ich will. Ich habe dieses Thema gelesen: wxPython: Calling an event manually aber nichts funktioniert.

Ich habe versucht:

wx.PostEvent(self.x.GetEventHandler(), wx.EVT_KILL_FOCUS) 

Aber es gibt:

TypeError: in method 'PostEvent', expected argument 2 of type 'wxEvent &'

ich auch versucht:

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

, die nicht so gut funktioniert.

+1

Mögliche Duplikat: Also für Ihr Beispiel würde es so etwas wie dies geschehen [WxPython: ein Ereignis manuell aufrufen] (http: // Stackoverflow .com/questions/747781/wxpython-Aufruf eines Ereignisses-manuell) –

+0

@SergeyGornostaev Hast du meine Frage gelesen? Ich habe dieses Thema in meiner Frage gepostet und erklärt, dass die Antworten dort nicht funktionieren und die Fehler anzeigen. – ban

Antwort

0

Die Dinge wie wx.EVT_KILL_FOCUS sind nicht das Ereignisobjekt, das hier benötigt wird. Dies sind Instanzen von wx.PyEventBinder, die, wie der Name schon sagt, dazu verwendet werden, Ereignisse an Handler zu binden. Das Ereignisobjekt, das für die Funktionen PostEvent oder ProcessEvent benötigt wird, ist der gleiche Objekttyp wie die Ereignisbehandlungsfunktionen. In diesem Fall wäre es eine Instanz von wx.FocusEvent.

Wenn Sie das Ereignisobjekt erstellen, müssen Sie möglicherweise auch den Ereignistyp festlegen, wenn diese Ereignisklasse mit mehr als einem Ereignistyp verwendet wird. Das Binderobjekt hat diesen Wert, damit Sie wissen, was zu verwenden ist. Normalerweise müssen Sie die ID auch auf die ID des Fensters festlegen, aus dem das Ereignis stammt.

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

... oder ...

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