Gdy nie chcesz niszczyć okna w PyGTK
nie zapomnij o return True.
Pisząc pewną aplikację (o której wkrótce) musiałem zaimplementować następującą funkcjonalność: przy próbie zamknięcia (kliknięcia w [X], Alt+F4, whateva’) okno ma się po prostu schować.
Niby proste, we wszystkich tutorialach i przykładach bindują gtk.main_quit() do sygnału „destroy” wysyłanego przez okno.
window.connect("destroy", lambda a: gtk.main_quit())
Lambda w tym przypadku zwraca funkcje przyjmującą jeden argument (nakładka na gtk.main_quit) ponieważ przy przechwyceniu sygnału destroy jako parametr przekazywany jest niszczony obiekt.
Przystosowując powyższą linijkę do naszych potrzeb nie powinno być problemu, obiekt gtk.Window powinien przestać być widoczny. Tak się właśnie stało, ale…
…po wywołaniu metody show okno było puste. Obiekt był przekazywany dalej, do niszczenia.
Rozwiązanie jest nadzwyczaj proste: http://www.pygtk.org/docs/pygtk/class-gtkwidget.html#signal-gtkwidget–delete-event
gtk.Window dziedziczy ten syngał pośrednio po gtk.Widget.
Wystarczy zbindować „delete_event” do odpowiedniej funkcji zwracającej True.
def hide(widget=None, event=None): global hidden hidden = True return True window.connect("delete_event", hide)
Rada: Dokumentacja to druga rzecz po tutorialu jaką powinieneś sprawdzić. Ufaj jej, nie skacz po nagłówkach i czytaj dokładnie cały opis – w przeciwnym wypadku tylko zmarnujesz czas. Sprawdzaj dziedziczenie obiektów.
Subskrybuj komentarze tego wpisu