Я пытаюсь сделать специальный экран-заставку, который отображается во время загрузки приложения, выводит сообщения о загрузке различных компонентов и имеет индикатор выполнения.
Первая задача, которую я решаю, — это сопоставление изображения .png с фреймом, в котором будет размещаться экран-заставка.
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()
Проблема в том, что dc.Clear() очищает до непрозрачного прямоугольника, хотя я установил его кисть и режим прозрачным (я думаю: D). Комментирование dc.Clear() дает мне желаемую переменную прозрачность на основе альфа-канала .png, но окно собирает шум изображения из соседних окон.
Как я могу получить как прозрачность .png, так и очистить фон до прозрачной кисти, чтобы не собирать шум изображения?