I'm trying to make a wx.Frame with variable transparancy (based on the png mapped in the erase bk event)

StackOverflow https://stackoverflow.com/questions/3343095

  •  30-09-2020
  •  | 
  •  

Question

I'm trying to make a special splash screen that is displayed while the application is loading, it outputs messages of the various components loading and features a progress bar.

The first job I am tackling is mapping a .png image to the frame that will host the splash screen.

import wx

class edSplash(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size=(410, 410), style=wx.NO_BORDER)
        self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
        self.Center()
        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
        return

    def OnEraseBackground(self, evt):
        dc = evt.GetDC() 
        if not dc:
            dc = wx.ClientDC(self)
            rect = self.GetUpdateRegion().GetBox()
            dc.SetClippingRect(rect)

        tempBrush = wx.Brush((0,0,0,0),wx.TRANSPARENT)
        print tempBrush
        dc.SetBackground(tempBrush)
        dc.SetBackgroundMode(wx.TRANSPARENT)
        #dc.Clear()
        img = wx.Image("splash.png", wx.BITMAP_TYPE_PNG, -1)
        bmp = wx.BitmapFromImage(img)
        dc.DrawBitmap(bmp, 0, 0, True)

    def PushMessage(self, mesage):
        print mesage


class edApp(wx.App):
    def OnInit(self):
        splash = edSplash(None, 'Ed')
        self.SetTopWindow(splash)
        splash.Show(True)
        return True

if __name__ == '__main__':
    edApp(redirect=False).MainLoop()

The problem is that dc.Clear() clears to an opaque rectangle, although i have set it's brush and mode to transparent (I think :D). Commenting out dc.Clear() gives me the desired variable transparency based on the .png's alpha channel but the window gathers image noise from the neighboring windows.

How could I get both the .png's transparency and have the background clearing to an transparent brush to keep from gathering image noise?

No correct solution

OTHER TIPS

Maybe you should try putting the background image onto a panel rather than the frame. Here's one way to do it:

http://www.blog.pythonlibrary.org/2010/03/18/wxpython-putting-a-background-image-on-a-panel/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top