Re: [Python] come chiudere in modo corretto le Window pygtk

2012-05-28 Per discussione Matteo Perini

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

2012-05-28 Per discussione Alessandro Dentella
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

2012-05-28 Per discussione Matteo Perini

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-05-26 Per discussione Gian Mario Tagliaretti
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

2012-05-25 Per discussione Matteo Perini



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

2012-05-24 Per discussione Matteo Perini




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-05-24 Per discussione Gian Mario Tagliaretti
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

2012-05-23 Per discussione Lorenzo Sutton

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

2012-05-23 Per discussione Matteo Perini


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