2012-04-13 20 views
0

我正在編寫一個簡單的文本編輯器,所以我試圖在關閉應用程序之前檢查未保存的更改。現在我知道它必須是'刪除事件'的東西,並通過搜索我找到了一種方式,但它給出了一個錯誤。如何覆蓋pygtk中的delete-event?

這是我的代碼:

__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() argument 1 must be gtk.Widget, not gtk.gdk.Event

什麼是做正確的方式?

+0

我已經找到了答案,但我必須等待7個小時才能發佈。 – emostafa 2012-04-13 03:58:41

回答

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。它防止默認處理程序發生,並以某種方式不再出現錯誤。

+1

'return True'可防止信號在其他處理程序上傳播。 – akaRem 2012-04-26 23:50:19