Zdravím všechny nadšence do programování. Píšu program v pythonu s knihovnou pygtk a narazil jsem na zvláštní problém. PyGtk automaticky zajišťuje, že když se klikne na křížek u okna, okno se skryje/uzavře, i když aplikace zůstane dál běžet.
#!/usr/bin/python
import gtk
label = gtk.Label("Hello World!")
win = gtk.Window()
win.add(label)
win.show_all()
gtk.main()
Na primitivním příkladu vidíte, že i když jsem nepropojoval žádné signály, okno se přesto po kliknutí na křížek skryje.
Člověku to ani tak nevadí až do chvíle, kdy potřebuje, aby se mu po kliknutí na křížek ukázala nabídka, jestli si přeje uložit změny v souboru/dokumentu.
Úryvek z konstrukční metody třídy:
...
self.builder.add_from_file('window.glade')
self.builder.connect_signals(self)
...
Callback:
def quit_activate (self, *args):
if self.fileSession.document_changed:
while 0 == 0:
response_id = self.file_changed_dialog(True)
if response_id == gtk.RESPONSE_YES:
response_id = self.file_save_dialog()
if response_id == gtk.RESPONSE_ACCEPT:
self.file_save_to (self.fileSaveDialog.get_uri())
gtk.main_quit()
sys.exit(0)
else:
continue
elif response_id == gtk.RESPONSE_NO:
gtk.main_quit()
sys.exit(0)
else:
self.fileChangedDialog.hide()
break
else:
gtk.main_quit()
sys.exit(0)
Po stisknutí křížku se provede definovaná metoda, ukáže se dialog. Tlačítko uložení a zahození změn funguje. Pokud ale dialog s informací o změně v dokumentu stornuju, nevrátí mě zpět do hlavního okna aplikace, ale jakoby vlítne na další callback od "destroy_event" okna (ten defaultní, který jsem nedefinoval), který jako v první ukázce skryje všechna okna, aniž by aplikaci ukončil.
Když zavolám metodu quit_activate například jako callback z nabídky soubor, funguje tak jak má a při stornování dialogu se vrátí zpátky do hlavního okna.
Vážně vůbec nevím, co s tím, takže jestli už někdy někdo podobný problém řešil, budu hrozně rád za sebemenší pomoc. Díky:)