Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.

Autor Téma: PyGTK: jak se zbavit automatického propojení křížku aplikace? [vyřešeno]  (Přečteno 1040 krát)

jhrdka

  • Návštěvník
  • *
  • Příspěvků: 60
    • Zobrazit profil
    • Jan Hrdina
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:)
« Poslední změna: 15 Červen 2010, 21:08:19 od jhrdka »

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3133
    • Zobrazit profil
    • GdH-Notes
Re: PyGTK: jak se zbavit automatického propojení křížku aplikace?
« Odpověď #1 kdy: 14 Červen 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.

jhrdka

  • Návštěvník
  • *
  • Příspěvků: 60
    • Zobrazit profil
    • Jan Hrdina
Re: PyGTK: jak se zbavit automatického propojení křížku aplikace?
« Odpověď #2 kdy: 15 Červen 2010, 21:07:58 »
Díky moc, už to funguje, jak má... bezva..