[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