[Python] wxPython: non-GUI Thread e show() di un nuovo frame
Massimiliano Costacurta
massi_srb a msn.com
Dom 18 Mar 2007 17:19:43 CET
Ciao, innanzi tutto scusate il titolo, ma non sapevo come riassumere meglio
il mio problema. In sostanza in un mio script (ambiente windows) ho un frame
in cui, quando viene schiacciato un bottone, viene eseguita un'elaborazione
molto lunga alla fine della quale viene mostrato un nuovo frame contenente i
dati elaborati. Siccome non voglio che l'elaborazione blocchi la mia
interfaccia ho pensato di creare un thread che la eseguisse, in modo tale
che l'utente possa eventualmente bloccarla. Il fatto è che alla fine del
thread il frame contenente i nuovi dati non si vede. Vi posto un pò di
codice d'esempio che schematizza il mio problema.
import wx, threading
from time import sleep
class MainFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, '', size=(100,100))
self.b1 = wx.Button(self, -1, 'Start', pos=(0,0))
self.status = wx.StaticText(self, -1, '', pos=(0,100))
self.Bind(wx.EVT_BUTTON, self.OnStart, self.b1)
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)
class SecondFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition,
wx.Size(200, 50))
wx.StaticText(self,-1,"Sono mostrato alla fine del thread")
class MyApp(wx.App):
def OnInit(self):
frame = MainFrame(None, -1, '')
frame.Show(True)
return True
app = MyApp(0)
app.MainLoop()
Probabilmente ciò che accade è perfettamente ovvio, ma io non capisco come
mai succeda. In tal caso qualcuno ha da suggerire qualche soluzione
alternativa?
Grazie mille,
Massi
_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
Maggiori informazioni sulla lista
Python