2017-04-05 8 views
-1

ich auf Fehler protokollieren wollen und das WxPython Skript zu beenden und dafür brauche ich wx.EVT_BUTTON.typeId Ereignis-ID auslösen: wx.ID_CLOSEWie kann ich manuell wx.Frame schließen Ereignis (WxPython) auslösen?

Ich habe OnExit definiert:

b_exit = wx.Button(self.statusBar, wx.ID_CLOSE, "Exit") 
b_exit.Bind(wx.EVT_BUTTON, self.OnExit) 
... 
def OnExit(self, evt) 
    self.Destroy() 

Wie kann ich generieren und verbreiten wx.ID_CLOSE Ereignis von meinem Code?

Ich habe versucht, aber es hat nicht funktioniert:

wx.PyCommandEvent(wx.EVT_BUTTON.typeId, wx.ID_CLOSE)

Antwort

0

OnExit zu

def OnExit(self, evt) 
    self.Close() 

ändert das EVT_CLOSE Ereignis auslösen. Stellen Sie sicher, dass Sie die Methode event.Skip() über die Methode "closed close" aufrufen. Destroy wird automatisch nach wx.Frame aufgerufen, nachdem der Rahmen geschlossen wurde.

Randbemerkung: Um ein Ereignis auslösen manuell wx.PostEvent sehen

+0

Haben Sie ein funktionierendes Beispiel für "Ein Ereignis manuell auslösen"? – olekb

+0

Dieser Link tut. Auf halbem Weg die Seite. Suchen Sie nach wx.PostEvent. Sie erstellen das Ereignis und rufen dann wx.PostEvent (target_window, evt) auf – user2682863

+0

Link ist ein Dokument, ich kann doc finden. Ich brauche ein paar Zeilen Code, die meine Frage – olekb

0

ohne die Möglichkeit, Ihren Code zu sehen, es ist schwierig zu wissen.
Ich hoffe, dieses kleine Beispiel für die Definition eines eigenen Ereignisses wird Ihnen erlauben, es auszuarbeiten. Ich muss zugeben, es hat mich eine Weile gedauert, bis ich mich erstmal darum gekümmert habe.

import wx 
import wx.lib.newevent 
NewEvent, EVT_MY_EVENT = wx.lib.newevent.NewEvent() 
CMD_ID = wx.NewId() 
class MyApp(wx.App): 
    def OnInit(self): 
     self.frame = MyFrame() 
     return True 

class MyFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self,None, title="Window", pos = (100,150), size =(250,200)) 
     sizer = wx.BoxSizer() 
     self.button1 = wx.Button(self, CMD_ID, label="Button 1") 
     sizer.Add(self.button1) 
     self.Bind(wx.EVT_BUTTON, self.OnButton,id=CMD_ID) 
     self.Bind(EVT_MY_EVENT, self.OnMyEvent) 
     self.Layout() 
     self.Show() 

    def OnButton(self, event): 
     id = event.GetId() 
     event = NewEvent(action="perform a defined action",button=id,other_setting=1234) 
     wx.PostEvent(self, event) 

    def OnMyEvent(self, event): 
     button = event.button 
     action = event.action 
     other = event.other_setting 
     print "event button number", button 
     print "event action request", action 
     print "event other", other 

if __name__ == "__main__": 
    app = MyApp() 
    app.MainLoop() 
Verwandte Themen