2012-04-13 6 views
0

Ich schreibe einen einfachen Texteditor, also versuche ich, ungespeicherte Änderungen zu überprüfen, bevor ich die Anwendung schließe. Jetzt weiß ich, dass es etwas mit "delete-event" sein muss, und durch googlen habe ich einen Weg gefunden, aber es gibt einen Fehler.Wie lösche ich delete-event in pygtk?

Dies ist mein Code:

__gsignals__ = { 
    "delete-event" : "override" 
} 

def do_delete(self, widget, event): 
    print 'event overriden' 
    tabsNumber = self.handler.tabbar.get_n_pages() 
    #self.handler.tabbar.set_current_page(0) 
    for i in range(tabsNumber, 0): 
     doc = self.handler.tabbar.docs[i] 
     lines = self.handler.tabbar.lineNumbers[i] 
     self.handler.tabbar.close_tab(doc, lines) 

#  if self.handler.tabbar.get_n_pages() == 0: 
#   self.destroy_app() 

    def destroy_app(self): 
    gtk.main_quit() 

und das ist der Fehler, den ich bekommen:

TypeError: Gtk.Widget.delete_event() argument 1 must be gtk.Widget, not gtk.gdk.Event

Was ist der richtige Weg, es zu tun?

+0

Ich habe die Antwort gefunden, aber ich muss 7 Stunden warten, um es zu posten. – emostafa

Antwort

2

ich die Antwort,

self.connect('delete-event', self.on_delete_event) 

und

__gsignals__ = { 
    "delete-event" : "override" 
} 
def on_delete_event(event, self, widget): 
    tabsNumber = self.handler.tabbar.get_n_pages() 
    #self.handler.tabbar.set_current_page(0) 
    for i in range(tabsNumber, 0): 
     doc = self.handler.tabbar.docs[i] 
     lines = self.handler.tabbar.lineNumbers[i] 
      self.handler.tabbar.close_tab(doc, lines) 
    self.hide() 
    self.destroy_app() 
    return True 

Der Schlüssel ist

in return True gefunden. Es verhindert, dass der Standard-Handler stattfindet und irgendwie erscheint der Fehler nicht mehr.

+1

'return True' verhindert Signalweiterleitung auf weiteren Handlern. – akaRem