wxpython 控件透明_在wxPython中绘制具有透明/半透明背景的控件有哪些选项?

我正在编写一个wxPython应用程序,它需要与现有Windows应用程序的外观匹配。

我试图把静态文本和按钮控件放在渐变背景的面板上。以下是我找到的方法,但我还是忍不住觉得自己错过了什么。我应该如何绘制静态文本和自定义控件并让背景显示出来?在以某种方式说服本地控制者不要画背景。这尤其适用于wxStaticText

启用“全局系统”选项

msw.window.no-clip-children让背景显示出来?在

传递一个重新绘制函数,该函数将修补每个函数的背景

控件的onPaint处理程序期间

2似乎是最简单的,但我想知道是否有原因关闭它。在全局范围内启用“无剪辑子对象”是否会影响性能?有没有办法只打开我想要的窗户?在

编辑:示例代码和脚本

抱歉,如果这看起来像是一个问题的答案。我想知道有没有正确的方法来做这件事。在

#!/usr/bin/python

import wx

class GradientPanel(wx.Panel):

def __init__(self,*args,**kwargs):

wx.Panel.__init__(self,*args,**kwargs)

self.Bind(wx.EVT_PAINT,lambda e: self.paintBackground())

self.Bind(wx.EVT_ERASE_BACKGROUND,lambda e: None)

self.t=wx.StaticText(self,pos=(30,20),label="wxStaticText. Looks bad on MSW")

self.t2=MyStaticText(self,pos=(30,50), size=(300,25), label="MyStaticText. Needs ClipChildren turned off")

self.t3=MyStaticTextWithCustomBackground(self,pos=(30,80),size=(300,25), label="This Control touches up its own background",paintBackgroundToDC=self.paintBackgroundToDC)

def paintBackground(self):

dc=wx.PaintDC(self)

self.paintBackgroundToDC(self,dc)

def paintBackgroundToDC(self,ofWindow,dc=None):

r=self.GetScreenRect()

r.SetTopLeft(ofWindow.ScreenToClient(r.GetTopLeft()))

dc.GradientFillLinear(r,wx.Colour(240,240,240),wx.Colour(128,128,255),wx.SOUTH)

class MyStaticText(wx.Window):

def __init__(self,parent,label,**kwargs):

wx.Window.__init__(self,parent,**kwargs)

self.label=label

self.Bind(wx.EVT_PAINT,lambda e: self.repaint())

self.Bind(wx.EVT_ERASE_BACKGROUND,lambda e: None)

def repaint(self):

self.repaintToDC(wx.PaintDC(self))

def repaintToDC(self,dc):

dc.DrawText(self.label,0,0)

class MyStaticTextWithCustomBackground(MyStaticText):

def __init__(self,parent,label,paintBackgroundToDC=None,**kwargs):

self.paintBackgroundToDC=paintBackgroundToDC

MyStaticText.__init__(self,parent,label,**kwargs)

def repaint(self):

dc=wx.PaintDC(self)

if self.paintBackgroundToDC:

self.paintBackgroundToDC(self,dc)

MyStaticText.repaintToDC(self,dc)

if __name__ == "__main__":

#wx.SystemOptions.SetOptionInt('msw.window.no-clip-children',1)

app=wx.PySimpleApp()

frame=wx.Frame(None,title="Transparent Controls")

panel=GradientPanel(frame)

frame.Show()

app.MainLoop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值