Re: [Python] come chiudere in modo corretto le Window pygtk
Il 26/05/2012 16:01, Gian Mario Tagliaretti ha scritto: 2012/5/25 Matteo Periniperini.mat...@gmail.com: ciao Matteo, - hai scritto la GUI a metà con glade e a metà scrivendo il codice a mano, il mantenimento diventa infernale Concordo ma secondo te mi conviene creare le varie finestre con glade (tutte) o usare solo gtk (però la gui potrebbe complicarsi a breve). Io farei tutte le finestre con Glade nascoste di default (w.hide()) e non definirti i segnali nel codice ma solo le callback, metti il nome della callback che userai nei controlli in Glade. Ciao a tutti. Anche grazie ai vostri consigli ho risolto... Il tutto funziona bene sia se scritto completamente in pygtk (senza usare glade), sia completamente in glade. Ho fatto varie prove e il codice misto non piace proprio a python. Grazie Matteo P ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come chiudere in modo corretto le Window pygtk
On Mon, May 28, 2012 at 11:21:55AM +0200, Matteo Perini wrote: Il 26/05/2012 16:01, Gian Mario Tagliaretti ha scritto: 2012/5/25 Matteo Periniperini.mat...@gmail.com: ciao Matteo, - hai scritto la GUI a metà con glade e a metà scrivendo il codice a mano, il mantenimento diventa infernale Concordo ma secondo te mi conviene creare le varie finestre con glade (tutte) o usare solo gtk (però la gui potrebbe complicarsi a breve). Io farei tutte le finestre con Glade nascoste di default (w.hide()) e non definirti i segnali nel codice ma solo le callback, metti il nome della callback che userai nei controlli in Glade. Ciao a tutti. Anche grazie ai vostri consigli ho risolto... Il tutto funziona bene sia se scritto completamente in pygtk (senza usare glade), sia completamente in glade. Ho fatto varie prove e il codice misto non piace proprio a python. Non è così, il codice misto non ha alcun problema. Mi spiace che nella settimana passata non ho avuto tempo di risponderti, PyGtk accetta tranquillamente di creare delle interfacce con glade e di aggiungere a quelle direttamente usando le classi PyGtk, lo faccio normalmente e non ho alcuna contrindicazione. Il tuo problema mi pare fosse quello di distruggere le finestre e poi di volerle chiamare, una volta usato hide() e show() lo hai risolto. sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come chiudere in modo corretto le Window pygtk
Il 28/05/2012 11:46, Alessandro Dentella ha scritto: Non è così, il codice misto non ha alcun problema. Mi spiace che nella settimana passata non ho avuto tempo di risponderti, PyGtk accetta tranquillamente di creare delle interfacce con glade e di aggiungere a quelle direttamente usando le classi PyGtk, lo faccio normalmente e non ho alcuna contrindicazione. Il tuo problema mi pare fosse quello di distruggere le finestre e poi di volerle chiamare, una volta usato hide() e show() lo hai risolto. sandro *:-) Ciao Sandro, Grazie per la risposta e il chiarimento. Molto probabilmente il tutto dipende da me, che come programmatore sono piuttosto scarso, però ho fatto migliaia di prove e non sono riuscito in nessun modo a chiudere le finestre e poi a riaprirle... Dalle ultime due mail però ho notato che voi mi parlate di hide() e show() mentre io usavo destroy(); inoltre io provavo a riaprire la finestra richiamando la funzione che la descriveva (es: def win1(self):) e non con show(). Scusate per le questioni forse banali ma l'inesperienza mi sta facendo perdere un sacco di tempo e il vostro aiuto me ne fa risparmiare molto ;-). Ciao Grazie Matteo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come chiudere in modo corretto le Window pygtk
2012/5/25 Matteo Perini perini.mat...@gmail.com: ciao Matteo, - hai scritto la GUI a metà con glade e a metà scrivendo il codice a mano, il mantenimento diventa infernale Concordo ma secondo te mi conviene creare le varie finestre con glade (tutte) o usare solo gtk (però la gui potrebbe complicarsi a breve). Io farei tutte le finestre con Glade nascoste di default (w.hide()) e non definirti i segnali nel codice ma solo le callback, metti il nome della callback che userai nei controlli in Glade. Purtroppo però non ho ancora risolto... Ho inserito i delete event come mi hai consigliato ad esempio così: self.main_calibration.connect('delete-event', close_calib,self.main_calibration) def close_calib(window,event,finestra): finestra.destroy() finestra.hide() return True ma quando provo a riaprire la finestra con: def on_btn_main_calib_clicked(self,widget): self.main_calibration(self) mi da il seguente errore: Traceback (most recent call last): File GuiAndrea2.py, line 53, in on_btn_main_calib_clicked self.main_calibration(self) TypeError: 'gtk.Window' object is not callable sembra quasi che non riesca a ri-caricare la finestra. Qualche idea?? finestra.show() Ciao -- Gian Mario Tagliaretti GNOME Foundation member gia...@gnome.org ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come chiudere in modo corretto le Window pygtk
Ciao lista, ciao Matteo, Ciao e grazie per avermi dedicato del tempo Ci sono diverse cose che non vanno negli esempi che hai allegato, sinceramente ho guardato di fretta ma le prime cose da sistemare sono: - usa gtk.Buider invece dell'obsoleto (da molto) libglade Fatto! Non sapevo che libglade fosse obsoleto... è la prima gui che costruisco e ho trovato un po' di esempi on-line... Ne è uscito un collage... - perchè hai definito dei tuoi segnali che poi non usi? In linea generale definire dei nuovi segnali non è una buona idea, tutti i controlli hanno già i loro segnali, usa quelli. Fatto! Grazie per la dritta (pensavo che i segnali fossero l'unico modo per interfacciarsi con gade) - non vedo il delete-event collegato ad un evento (il problema che hai segnalato) Vedi sotto... - hai scritto la GUI a metà con glade e a metà scrivendo il codice a mano, il mantenimento diventa infernale Concordo ma secondo te mi conviene creare le varie finestre con glade (tutte) o usare solo gtk (però la gui potrebbe complicarsi a breve). - global num urla vendetta era solo una reminescenza di un test che avevo fatto... tolta! ciao Purtroppo però non ho ancora risolto... Ho inserito i delete event come mi hai consigliato ad esempio così: self.main_calibration.connect('delete-event', close_calib,self.main_calibration) def close_calib(window,event,finestra): finestra.destroy() return True ma quando provo a riaprire la finestra con: def on_btn_main_calib_clicked(self,widget): self.main_calibration(self) mi da il seguente errore: Traceback (most recent call last): File GuiAndrea2.py, line 53, in on_btn_main_calib_clicked self.main_calibration(self) TypeError: 'gtk.Window' object is not callable sembra quasi che non riesca a ri-caricare la finestra. Qualche idea?? Nel frattempo proverò a creare anche le finestre secondarie con glade. Grazie a tutti. Ciao Matteo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come chiudere in modo corretto le Window pygtk
Forse questa può essere d'aiuto/ispirazione? http://faq.pygtk.org/index.py?file=faq10.021.htpreq=show Lorenzo Ciao lista, ho scritto alcuni esempi usando solo pygtk e le finestre si chiudono correttamente... (riesco a ri-aprirle!!). Il problema però persiste sulla mia interfaccia. L'unica cosa in cui si differenzia dalle prove che ho fatto è che importo l'interfaccia da un file glade che ho creato a parte. Allego entrambi i file (non pretendo li guardiate. ma se proprio volete ;-)) Ciao Matteo import pygtk import gtk import gtk.glade import sys import subprocess global num class Window: def __init__(self): signals = { 'on_quit_button_clicked':self.on_quit_button_clicked, 'on_btn_take_picture_clicked':self.on_btn_take_picture_clicked, 'on_btn_take_object_clicked':self.on_btn_take_object_clicked, 'on_btn_stop_acquisition_clicked':self.on_btn_stop_acquisition_clicked, 'on_btn_main_calib_clicked':self.on_btn_main_calib_clicked, 'on_btn_reconstruction_clicked':self.on_btn_reconstruction_clicked } gladeFile = gtk.glade.XML(fname='Guiglade.glade') gladeFile.signal_autoconnect(signals) gw = gladeFile.get_widget self.win = gw('WinMain') self.win.connect(destroy, self.exit) self.quit_button=gw('quit_button') self.btn_take_picture=gw('btn_take_picture') self.btn_take_object=gw('btn_take_object') self.btn_stop_acquisition=gw('btn_stop_acquisition') self.btn_main_calib=gw('btn_main_calib') self.btn_reconstruction=gw('btn_reconstruction') self.win.show_all() def on_quit_button_clicked(self, widget): gtk.main_quit() return 0 def on_btn_take_picture_clicked(self,widget): self.win_take_pictures(self) def on_btn_take_object_clicked(self,widget): self.win_take_object(self) def on_btn_stop_acquisition_clicked(self,widget): self.convert_e_resize_images(self) def on_btn_main_calib_clicked(self,widget): self.main_calibration(self) def on_btn_reconstruction_clicked(self,widget): self.main_reconstruction(self) def main(self): gtk.main() def exit(self,widget): gtk.main_quit() sys.exit() return 0 def close_take_pictures(self,widget): self.win_take_pictures.destroy() return 0 def win_take_pictures(self, widget,data=None): def get_calib_image(self,entry,data=None): self.num = entry.get_text() subprocess.call(['./scan-firewire.py',self.num]) self.win_take_pictures = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win_take_pictures.set_position(gtk.WIN_POS_CENTER) self.win_take_pictures.set_title(Acquisisci le immagini per la calibrazione) self.win_take_pictures.set_border_width(15) self.win_take_pictures.connect(destroy,self.close_take_pictures) hbox1 = gtk.HBox(True, 0) hbox2 = gtk.HBox(True, 0) vbox = gtk.VBox(True, 0) self.entry1 = gtk.Entry() self.entry1lab = gtk.Label(ciao) num=self.entry1.get_text() self.button1 = gtk.Button(Grab Image) self.button1.connect(clicked,get_calib_image, self.entry1) self.label1 = gtk.Label(Acquisizione numero:) hbox1.pack_start(self.label1, True, True, 5) hbox1.pack_start(self.entry1,True,True,5) hbox2.pack_start(self.button1, True, True, 5) vbox.pack_start(hbox1, True, False, 5) vbox.pack_start(hbox2, True, False, 5) self.win_take_pictures.add(vbox) self.win_take_pictures.show_all() def win_take_object(self, widget,data=None): def get_obj_image(self,entry): self.num = entry.get_text() subprocess.call(['./scan-firewire-obj.py',self.num]) self.win_take_object = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win_take_object.set_position(gtk.WIN_POS_CENTER) self.win_take_object.set_title(Acquisisci le immagini per la calibrazione) self.win_take_object.set_border_width(15) hbox1 = gtk.HBox(True, 0) hbox2 = gtk.HBox(True, 0) vbox = gtk.VBox(True, 0) self.entry1 = gtk.Entry() self.entry1lab = gtk.Label(ciao) num=self.entry1.get_text() self.button1 = gtk.Button(Grab Image) self.button1.connect(clicked,get_obj_image, self.entry1) self.label1 = gtk.Label(Acquisizione oggetto numero:) hbox1.pack_start(self.label1, True, True, 5) hbox1.pack_start(self.entry1,True,True,5) hbox2.pack_start(self.button1, True, True, 5) vbox.pack_start(hbox1, True, False, 5) vbox.pack_start(hbox2, True, False, 5) self.win_take_object.add(vbox) self.win_take_object.show_all() #return self.num_grab def convert_e_resize_images(self,widget,data=None):
Re: [Python] come chiudere in modo corretto le Window pygtk
2012/5/24 Matteo Perini perini.mat...@gmail.com: Ciao lista, ciao Matteo, Il problema però persiste sulla mia interfaccia. L'unica cosa in cui si differenzia dalle prove che ho fatto è che importo l'interfaccia da un file glade che ho creato a parte. Allego entrambi i file (non pretendo li guardiate. ma se proprio volete Ci sono diverse cose che non vanno negli esempi che hai allegato, sinceramente ho guardato di fretta ma le prime cose da sistemare sono: - usa gtk.Buider invece dell'obsoleto (da molto) libglade - perchè hai definito dei tuoi segnali che poi non usi? In linea generale definire dei nuovi segnali non è una buona idea, tutti i controlli hanno già i loro segnali, usa quelli. - non vedo il delete-event collegato ad un evento (il problema che hai segnalato) - hai scritto la GUI a metà con glade e a metà scrivendo il codice a mano, il mantenimento diventa infernale - global num urla vendetta ciao -- Gian Mario Tagliaretti GNOME Foundation member gia...@gnome.org ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come chiudere in modo corretto le Window pygtk
On 23/05/12 12:56, Matteo Perini wrote: Ciao a tutti, Scusate la domanda banale ma sto cercando da un po di risolvere il seguente problema ma non ne vengo a capo. Ho una applicazione con una finestra principale che contiene dei semplici pulsanti. La pressione dei pulsanti mi fa aprire (a seconda del caso) una nuova Window che mi da' la possibilità di inserire del testo. Fino a qui tutto ok. Quando però chiudo la Window e successivamente provo a riaprirla per inserire dei nuovi dati ottengo: Forse questa può essere d'aiuto/ispirazione? http://faq.pygtk.org/index.py?file=faq10.021.htpreq=show Lorenzo File Gui.py, line 46, in on_btn_main_calib_clicked self.main_calibration(self) TypeError: 'gtk.Window' object is not callable e quindi non riesco a riaprire la finestra il codice della finestra in questione è: def main_calibration(self,widget,data=None): def calib1(self,entry): self.num = entry.get_text() print self.num self.main_calibration = gtk.Window(gtk.WINDOW_TOPLEVEL) self.main_calibration.set_position(gtk.WIN_POS_CENTER) self.main_calibration.set_title(Calibrazione) self.main_calibration.set_border_width(15) #self.main_calibration.connect(destroy, self.exit) hbox1 = gtk.HBox(True, 0) hbox2 = gtk.HBox(True, 0) vbox = gtk.VBox(True, 0) self.entry1 = gtk.Entry() self.entry1lab = gtk.Label(ciao) num=self.entry1.get_text() self.button1 = gtk.Button(Calibra) self.button1.connect(clicked,calib1, self.entry1) self.label1 = gtk.Label(Numero di acquisizioni valide:) hbox1.pack_start(self.label1, True, True, 5) hbox1.pack_start(self.entry1,True,True,5) hbox2.pack_start(self.button1, True, True, 5) vbox.pack_start(hbox1, True, False, 5) vbox.pack_start(hbox2, True, False, 5) self.main_calibration.add(vbox) self.main_calibration.show_all() gtk.main() Se avete avuto la pazienza di leggere fino a qui vi sarete accorti che c'è una linea commentata: #self.main_calibration.connect(destroy, self.exit) questa chiude sia la Window voluta che la finestra principale (cosa che non deve accadere). Ogni suggerimento su come risolvere questo piccolo problema è ben accetto. Grazie a tutti Matteo P ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] come chiudere in modo corretto le Window pygtk
Quando però chiudo la Window e successivamente provo a riaprirla per inserire dei nuovi dati ottengo: Forse questa può essere d'aiuto/ispirazione? http://faq.pygtk.org/index.py?file=faq10.021.htpreq=show Lorenzo Ciao Lorenzo, Grazie per la risposta. Purtroppo non riesco a far funzionare l'esempio che mi hai postato. Mi spiego meglio. La Window figlia viene creata la prima volta a seguito di un click su un bottone e con l'esempio che hai postato tu sembrerebbe chiudersi correttamente. (anche con il click sulla x della finestra). Il problema nasce quando cerco di riaprire la stessa finestra figlia il messaggio è sempre: File Gui.py, line 48, in on_btn_main_calib_clicked self.main_calibration(self) TypeError: 'gtk.Window' object is not callable Sembra quasi che ci sia un qualcosa che mi tiene occupato l'oggetto Window e non mi lascia ri-chiamarlo. Qualche idea?? Ciao e Grazie Matteo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python