在wxpython中,怎样把一张含有透明部分的png图片加载到窗口中,透明部分依旧呈现透明?

在wxpython中,怎样把一张含有透明部分的png图片加载到窗口中,透明部分依旧呈现透明?,第1张

如果是直接显示图片,可以设置图片的Alpha通道数据来实现透明:

[I,map,alpha] = imread('im.png')

h = imshow(I)

set(h,'AlphaData',alpha)

但对于控件而言,只能通过CData属性指定图像数据,而没有指定透明度的手段,所以,要想实现透明效果,只能在读图片时把透明色以控件的背景色代替。例如:

BG = get(gcf,'defaultuicontrolback')

[I,map] = imread('im.png','BackgroundColor',BG)

希望对题主有帮助,有问题可追问。

另,看到题主在MATLAB中文论坛上也有提问,我在那里也回答了,有问题也可以在那里讨论。毕竟度娘过于傲娇,限制多多,一不小心就抽风。不过,如果在那里讨论的话,还是请通过私信或者在这里追问的方式告诉我一声,因为我不经常访问那里。

用wxformbuilder+一点代码来实现。

首先用wxformbuilder来做出界面,并生成代码。运行结果:

使其有背景图片效果:

#coding:utf-8

import wx

#导入wxformbuilder生成的代码

import BgDemo

class Main(wx.App):

def __init__(self, redirect=False, filename=None):

wx.App.__init__(self, redirect, filename)

dlg = BgDemo.MyFrame(None)

#这里设置哪个控件需要设置背景

dlg.m_panel1.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)

dlg.Show()

def OnEraseBackground(self, evt):

"""

设置背景的方法

"""

dc = evt.GetDC()

if not dc:

dc = wx.ClientDC(self)

rect = self.GetUpdateRegion().GetBox()

dc.SetClippingRect(rect)

dc.Clear()

bmp = wx.Bitmap("Sunset.jpg")

dc.DrawBitmap(bmp, 0, 0)

if __name__ == "__main__":

app = Main()

app.MainLoop()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/bake/11892577.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存