On Aug 8, 11:25 pm, "[david]" <[EMAIL PROTECTED]> wrote: > I'd like to refresh the display before I start the main loop. > > I have code like this: > > app = App() > app.Show() > app.long_slow_init() > app.MainLoop() > > The main frame partly loads at Show, but because the mainloop has not > started yet, the display does not update until long_slow_init() finishes. > > Alternatively, I could code > > app = App() > app.long_slow_init() > app.Show() > app.MainLoop() > > Which would give me a crisp Show, but there would be a long slow wait > before the app showed any activity at all. I would need a splash screen. > > I'd rather not have a splash screen (and I don't know how anyway). I'd > like to just make app.Show() finish correctly before running > long_slow_init. > > Is there a wx internal method that I can use to give Windows the > opportunity to finish painting the frame before I run long_slow_init()? > > Or is there a better idea? > > (david)
I don't see my original post, so here it is again.... You can use another thread to execute long_slow_init(): -------------- import wx import threading import time class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, "My Window") panel = wx.Panel(self, -1) button = wx.Button(panel, -1, "click me, quick!", pos=(40, 40)) self.Bind(wx.EVT_BUTTON, self.onclick) def onclick(self, event): print "button clicked" def receive_result(self, result): print "Hey, I'm done with that long, slow initialization." print "The result was:", result class MyApp(wx.App): def __init__(self): wx.App.__init__(self, redirect=False) def OnInit(self): #called by wx.Python the_frame = MyFrame() the_frame.Show() t = MyThread(the_frame) t.start() #calls t.run() return True class MyThread(threading.Thread): def __init__(self, a_frame): threading.Thread.__init__(self) self.frame_obj = a_frame def run(self): result = self.long_slow_init() wx.CallAfter(self.frame_obj.receive_result, result) #CallAfter() calls the specified function with the #specified argument when the next pause in execution #occurs in this thread: def long_slow_init(self): print "starting long_slow_init()..." time.sleep(6) result = 20.5 return result app = MyApp() app.MainLoop() -- http://mail.python.org/mailman/listinfo/python-list