如何覆盖pygtk中的delete-event?

时间:2012-04-13 03:28:52

标签: override pygtk

我正在编写一个简单的文本编辑器,因此我尝试在关闭应用程序之前检查未保存的更改。现在我知道它必须是'删除事件',并通过谷歌搜索我找到了一种方法,但它给出了一个错误。

这是我的代码:

__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()

这是我得到的错误:

  

TypeError:Gtk.Widget.delete_event()参数1必须是gtk.Widget,而不是gtk.gdk.Event

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我找到了答案,

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

__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

密钥位于return True。它可以防止发生默认处理程序,并且不会再以错误的方式显示错误。