python - 我正在尝试制作一个具有可变透明度的 wx.Frame(基于 erase bk 事件中映射的 png)

标签 python wxpython wxwidgets

我正在尝试制作一个在应用程序加载时显示的特殊启动画面, 它输出各种组件加载的消息并带有进度条。

我要处理的第一项工作是将 .png 图像映射到将承载启动画面的框架。

导入 wx

类 edSplash(wx.Frame):
    def __init__( self , parent ,头衔):
        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)
        返回

    def OnEraseBackground( self ,evt):
        直流 = evt.GetDC()
        如果不是直流:
            dc = wx.ClientDC(self)
            rect = self.GetUpdateRegion().GetBox()
            dc.SetClippingRect(矩形)

        tempBrush = wx.Brush((0,0,0,0),wx.TRANSPARENT)
        打印温度刷
        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, 真)

    def PushMessage( self ,消息):
        打印信息


类 edApp(wx.App):
    def OnInit( self ):
        splash = edSplash(无,'Ed')
        self.SetTopWindow(启动画面)
        飞溅。显示(真)
        返回真

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

问题是 dc.Clear() 清除为不透明的矩形,尽管我已将其画笔和模式设置为透明(我认为 :D)。注释掉 dc.Clear() 会根据 .png 的 alpha channel 为我提供所需的可变透明度,但该窗口会从相邻窗口收集图像噪声。

我怎样才能既获得 .png 的透明度又将背景清除为透明画笔以防止收集图像噪声?

最佳答案

也许您应该尝试将背景图像放在面板上而不是框架上。这是一种方法:

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

关于python - 我正在尝试制作一个具有可变透明度的 wx.Frame(基于 erase bk 事件中映射的 png),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3343095/

相关文章:

python - Django 休息框架 : How do I order/sort a search/filter query?

python - 错误没有名为 6 的模块

python - 如何添加wx.BoxSizer边框?

python - 将通用字体方案应用于 wxPython 中的多个对象

c++ - 全局访问 wxFrame(s) & wxDialog(s)

python - wxPython - wxGrid - 如何检测哪一列移动到哪里

python - 艰难地学习 Python 练习 48 帮助

python - 如何将 Python Keyring 与 Box API OAuth2 结合使用?

python - 在 wxPython 的面板之间拖动按钮

c++ - 为什么我调用 'wxGetTranslation' 会导致编译器错误 "ambiguous call to overloaded function"?