[Python] wxPython: non-GUI Thread e show() di un nuovo frame
Daniele Varrazzo
piro a develer.com
Dom 18 Mar 2007 19:56:14 CET
> def OnStart(self, event) :
> s = threading.Thread(target=self.CreateNewFrame)
> s.start()
>
> def CreateNewFrame(self) :
> #ciclo for che simula l'elaborazione
> for i in range(10) :
> print i
> sleep(1)
> frm = SecondFrame(self,-1,"")
> frm.Show(True)
Ciao,
credo che vada bene effettuare i calcoli in un thread separato, ma dovresti
lasciare il compito di aggiornare l'interfaccia al solo thread principale.
Questo vuol dire che, quando il calcolo è finito, "CreateNewFrame()" (in
quest'ottica il nome è fuorviante: sarebbe un "PerformCalculation()")
dovrebbe
*avvertire* il thread principale che il calcolo è stato effettuato e i dati
sono disponibili.
Credo tu possa inviare un evento dal thread lavoratore, mentre nel main loop
potrebbe esserci un event handler in grado di intercettarlo ed aggiornare
l'interfaccia di conseguenza. Questo aiuterebbe anche a disaccoppiare il
calcolo dall'interfaccia.
Mi dispiace però non poterti dire "a codice" come si fa: è da qualche annetto
che non uso wx e non mi ricordo in questo framework come si interagisce a suon
di eventi. Comunque sono sicuro che il livllo di difficoltà per farlo sia "da
tutorial" :)
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python