You could always download the latest Dabo from our Subversion repository. 
The code is a little more complex than a typical wxPython app, since we have our Dabo application object, which creates our uiApp object, which for wx is an instance of wx.App. But the Dabo app object executes the following:
self.uiApp = dabo.ui.uiApp(self, callback=self.initUIApp)
The UI app (wx.App) stores the dabo app reference and callback, and then its OnInit() reads:
def OnInit(self):
app = self.dApp
if app.showSplashScreen:
splash = SplashScreen(app.splashImage, app.splashMaskColor,
app.splashTimeout)
splash.Show()
wx.CallAfter(self.callback)
return True
I'm including the code for the SplashScreen class after my sig - it should look pretty familiar to you. 
-- Ed Leafe
-- http://leafe.com
-- http://dabodev.com
class SplashScreen(wx.Frame):
"""This is a specialized form that is meant to be used as a startup
splash screen. It takes an image file, bitmap, icon, etc., which is used
to size and shape the form. If you specify a mask color, that color
will be masked in the bitmap to appear transparent, and will affect the
shape of the form.
You may also pass a 'timeout' value; this is in milliseconds, and determines
how long until the splash screen automatically closes. If you pass zero
(or don't pass anything), the screen will remain visible until the user
clicks on it.
Many thanks to Andrea Gavana, whose 'AdvancedSplash' class was a
huge inspiration (and source of code!) for this Dabo class. I also borrowed
some ideas/code from the wxPython demo by Robin Dunn.
"""
def __init__(self, bitmap=None, maskColor=None, timeout=0):
style = wx.FRAME_NO_TASKBAR | wx.FRAME_SHAPED | wx.STAY_ON_TOP
wx.Frame.__init__(self, None, -1, style=style)
if isinstance(bitmap, basestring):
# Convert it
self._bmp = dabo.ui.pathToBmp(bitmap)
else:
self._bmp = bitmap
if maskColor is not None:
if isinstance(maskColor, basestring):
maskColor = dabo.dColors.colorTupleFromName(maskColor)
self._bmp.SetMask(wx.Mask(self._bmp, maskColor))
if wx.Platform == "__WXGTK__":
self.Bind(wx.EVT_WINDOW_CREATE, self.setSizeAndShape)
else:
self.setSizeAndShape()
self.setSizeAndShape()
self.Bind(wx.EVT_MOUSE_EVENTS, self._onMouseEvents)
self.Bind(wx.EVT_PAINT, self._onPaint)
if timeout > 0:
self.fc = wx.FutureCall(timeout, self._onTimer)
def setSizeAndShape(self, evt=None):
w = self._bmp.GetWidth()
h = self._bmp.GetHeight()
self.SetSize((w, h))
self.SetBackgroundColour(wx.WHITE)
reg = wx.RegionFromBitmap(self._bmp)
self.SetShape(reg)
self.CenterOnScreen()
self.Refresh()
if evt is not None:
evt.Skip()
def _onMouseEvents(self, evt):
if evt.LeftDown() or evt.RightDown():
self._disappear()
evt.Skip()
def _onTimer(self):
self._disappear()
def _disappear(self):
try:
self.fc.Stop()
except:
pass
self.Close()
def _onPaint(self, evt):
dc = wx.PaintDC(self)
dc.DrawBitmap(self._bmp, 0, 0, False)
# I plan on adding support for a text string to be
# displayed. This is Andrea's code, which I may use as
# the basis for this.
# textcolour = self.GetTextColour()
# textfont = self.GetTextFont()
# textpos = self.GetTextPosition()
# text = self.GetText()
# dc.SetFont(textfont[0])
# dc.SetTextForeground(textcolour)
# dc.DrawText(text, textpos[0], textpos[1])
# Seems like this only helps on OS X.
if wx.Platform == "__WXMAC__":
wx.SafeYield(self, True)
evt.Skip()
···
On Feb 10, 2006, at 3:28 PM, Andrea Gavana wrote:
Mhm... it would be nice for me to have a way to reproduce the problem (i.e.
run a similar script as yours). I know AdvancedSplash is not so complicated,
so I am sure you can sort it out without my (quite often stupid
)
suggestions. However, if you have a way to send the code (or a similar one
that reproduce the problem) I can try to take a look at it. 4 eyes are
always better than 2;-)