[Python] passare da una finestra all'altra (GUI)

Matteo Perini perini.matteo a gmail.com
Gio 2 Ago 2012 15:31:42 CEST


Ciao a tutti:
Rieccomi con un nuovo quesito.

La mia applicazione ha una finestra principale dalla quale (fino ad 
oggi) richiamavo altre finestre (che per semplicità avevo inglobato 
direttamente nella classe principale). Le interfacce sono disegnate con 
glade in gtk.
Ecco un esempio di cosa fa il codice quando clicco su un bottone.

     def on_btn_zero_clicked(self,widget,data=None):
         def turnback(self2):
             gtk.Widget.set_sensitive(self.btn_test,True)
             self.w.destroy()
             self.win.set_visible(True)
         b=gtk.Builder()
         b.add_from_file('zero.glade')
         self.w = b.get_object("window1")
         self.w.show_all()
         self.back.connect('clicked',turnback)
         gtk.main()

Così non ho nessun problema... quando viene schiacciato il bottone la 
finestra principale viene nascosta, appare la "secondaria" e quando 
clicco sul bottone back la finestra viene chiusa e resa nuovamente 
visibile la finestra principale.

Ora l'applicazione si sta complicando e volevo mettere almeno alcune 
finestre in classi separate dalla principale (ha senso vero?).
Il problema che mi blocca è che dalla finestra principale riesco a 
richiamare la secondaria con:

self.inc=Window()   ##Window è la classe della finestra secondaria
self.win.set_visible(False)  ##nascondo la finestra principale
self.inc.main() ## faccio partire la finestra secondaria

ma quando voglio tornare alla principale non riesco a far riapparire la 
finestra.
Se chiudo (con destroy) la finestra secondaria si chiude tutto il programma.
Se prima di fare il destroy della secondaria faccio partire la 
principale, la secondaria rimane aperta.

self.xxx=Win_main().win  ##richiamo l'oggetto finestra principale
self.xxx.set_visible(True)  ## la rendo visibile
self.win.destroy()   ##chiudo la secondaria   (non chiude)

Come faccio ad ottenere lo stesso comportamento di prima?
Qualche idea???
Se non sono stato chiaro ditemelo che cercherò di spiegarmi meglio.
Grazie
Matteo P


Maggiori informazioni sulla lista Python