dasfmi
dasfmi

Reputation: 531

How to override delete-event in pygtk?

I am coding a simple text editor, so I am trying to check unsaved changes before closing the application. Now I know it has to be something with 'delete-event', and by googling around I have found a way, but it gives an error.

This is my 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()

And this is the error I get:

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

What is the right way to do it?

Upvotes: 1

Views: 1328

Answers (1)

dasfmi
dasfmi

Reputation: 531

I found the answer,

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

and

__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

The key is in return True. It prevents the default handler to take place and for somehow the error doesn't appear any more.

Upvotes: 4

Related Questions