2010-07-27 1 views
3

응용 프로그램이로드되는 동안 표시되는 특수 시작 화면을 만들려고합니다. 출력합니다. 다양한 구성 요소의 메시지로드 및 진행률 표시 줄이 있습니다.변수 transparancy가있는 wx.Frame을 만들려고합니다. (지우기 이벤트에 매핑 된 png를 기반으로합니다)

내가 처음 해결해야 할 작업은 .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의 투명도를 얻고 이미지 노이즈가 발생하지 않도록 배경을 투명한 브러시로 지울 수 있습니까?

답변

관련 문제