PDA

Visualizza la versione completa : [wxPython] Problema con label


fermat
24-01-2013, 18:38
ciao a tutti!
quando premo su un bottone lancio questa funzione:


def download(self, strUrl):
self.lblWait.SetLabel("Wait...")
subprocess.call([..........l])
self.txtUrl.SetValue("")
self.lblWait.SetLabel("Finished")

funziona tutto tra la prima chiamata a SetLabel.
poi tutte le altre istruzioni sott non hanno problemi.
sapete dirmi il perchè?

MItaly
24-01-2013, 22:21
Non conosco bene le wxPython, ma probabilmente deriva dal fatto che la SetLabel aspetta il successivo evento di ridisegno prima di aggiornare effettivamente il testo, ma la subprocess.call è bloccante, per cui il message loop resta bloccato nel frattempo e il testo dell'etichetta quindi non viene aggiornato. La cosa più semplice può essere dare una


self.lblWait.Update()

subito dopo la prima SetLabel. Nota comunque che, per tutta la durata della subprocess.call, l'interfaccia rimarrà comunque bloccata.

fermat
25-01-2013, 00:54
si che rimane bloccata me ne sono accorto.
è per questo che volevo mettere da qualche parte un messaggio di avvertimento che sta in effetti succedendo qualcosa.
intanto ero partito con un semplice Wait su una label.
appena posso provo come mi hai detto.
intanto grazie!

MItaly
25-01-2013, 01:12
L'alternativa è usare, invece di subprocess.call, la classe subprocess.Popen, che ti consente di creare un processo senza attendere la sua terminazione, in modo da mantenere in funzione la GUI; per sapere quando il processo è terminato ti basta quindi richiamare ciclicamente il metodo poll (http://docs.python.org/2/library/subprocess.html#subprocess.Popen.poll) dell'oggetto Popen.

fermat
25-01-2013, 20:48
usare Update come hai detto tu ha funzionato.

per quanto riguarda il secondo suggerimento, per ora mi va bene che la gui si blocchi.
ma lo terrò a mente per le prossime idee che mi vengono in mente.

grazie!!!

MItaly
26-01-2013, 00:24
:ciauz:

Loading