How to override delete-event in pygtk?

一笑奈何 提交于 2019-12-08 09:01:49

问题


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?


回答1:


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.



来源:https://stackoverflow.com/questions/10134854/how-to-override-delete-event-in-pygtk

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!