Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: jhrdka 14 Června 2010, 21:58:05

Název: PyGTK: jak se zbavit automatického propojení křížku aplikace? [vyřešeno]
Přispěvatel: jhrdka 14 Června 2010, 21:58:05
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.
Kód: [Vybrat]
#!/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:
Kód: [Vybrat]
...
self.builder.add_from_file('window.glade')
self.builder.connect_signals(self)
...

Callback:
Kód: [Vybrat]
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:)
Název: Re: PyGTK: jak se zbavit automatického propojení křížku aplikace?
Přispěvatel: GdH 14 Června 2010, 22:55:31
Kliknutí na křížek u okna vyvolá signál delete-event, pokud mu vrátíš True, ke smazání okna nedojde.
Název: Re: PyGTK: jak se zbavit automatického propojení křížku aplikace?
Přispěvatel: jhrdka 15 Června 2010, 21:07:58
Díky moc, už to funguje, jak má... bezva..