[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