Es por que por un lado tienes el evento delete y por otro lado tienes el destroy.
Como puedes ver en el hello word
Código Python:
Ver original# Here we connect the "destroy" event to a signal handler.
# This event occurs when we call gtk_widget_destroy() on the window,
# or if we return FALSE in the "delete_event" callback.
En el programa de arriba si te das cuenta no tiene un evento destroy, por eso es que lo pone en el evento delete.
Modifique el programa y hace exactamente lo mismo. Pero como puedes ver ahora tiene un evento destroy. Que en caso anterior no tenia.
Código Python:
Ver originalimport pygtk
pygtk.require("2.0")
import gtk
class UI(object):
def __init__(self):
self.label = gtk.Label("Hello world!")
self.window = self.make_window()
self.window.show_all()
def make_window(self):
window = gtk.Window()
window.set_title("Hi!")
window.set_default_size(200, 100)
window.connect("destroy", gtk.main_quit)
window.connect("delete-event", self.win_close, None)
window.add(self.label)
return window
def start(self):
gtk.main()
def win_close(self, widget, event, data):
dialog = gtk.MessageDialog(self.window, gtk.DIALOG_MODAL,
gtk.MESSAGE_INFO, gtk.BUTTONS_YES_NO,
"Quit?")
dialog.set_title(":(")
response = dialog.run()
dialog.destroy()
if response == gtk.RESPONSE_YES:
return False # returning False makes "destroy-event" be signalled
# for the window.
else:
return True # returning True avoids it to signal "destroy-event"
def main():
myUI = UI()
myUI.start()
print "Now we're outside the UI, but still in the program"
main()