Я пытаюсь создать специальный экран-заставку, который отображается во время загрузки приложения, он выводит сообщения о загрузке различных компонентов и показывает индикатор выполнения.
Первое, что я решаю, это отображениеизображение .png для фрейма, на котором будет размещаться заставка.
import wx</p>
<pre><code>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 и иметь фоночистить прозрачную кисть, чтобы избежать шума изображения?