wxpython:透明背景上的StaticText

时间:2010-02-01 18:46:19

标签: text wxpython background transparent onpaint

我正在尝试创建一个没有背景的wx.StaticText子类。我尝试使用SetBackgroundColor设置背景的alpha分量,或者在没有运气的情况下使用SetTransparent设置各种对象,但也许只是因为我是noobie:)

无论如何,我最终继承了wx.StaticText,修改了OnPaint方法,以便不绘制背景,并将EVT_PAINT绑定到这个新方法。

它在大多数情况下(当应用程序启动时,或者在被另一个窗口隐藏后重新绘制时)非常好用,但每当我在SetLabel子类的实例上使用StaticText方法时1}},调用窗口不是我的OnPaint方法,最后是默认的灰色背景。

下面是一个“小”的工作示例。它首先显示没有背景的文本,等待1.5秒,然后更改文本的标签,这也标注背景(并且不会调用我自己的绘画方法)。

import wx,time

class MyStaticText(wx.StaticText):
    def __init__(self,parent,id,label,
                 pos=wx.DefaultPosition,
                 size=wx.DefaultSize,
                 style=0):
        wx.StaticText.__init__(self,parent,id,label,pos,size,style)
        self.Bind(wx.EVT_PAINT,self.OnPaint)

    def OnPaint(self,event):
        dc = wx.PaintDC(self)    
        dc.DrawText('Test 3', 40, 0)

class MyFrame(wx.Frame):
    def __init__(self,width=150,height=80):
        wx.Frame.__init__(self, None, size=(width, height))
        self.test_text = MyStaticText(self, -1, 'Test 1',
                             size=wx.Size(width, height))
        self.Show()
        self.Timer = wx.Timer(self,-1)
        self.Timer.Start(1500)
        self.Bind(wx.EVT_TIMER,self.OnTimer)

    def OnTimer(self,event):
        self.test_text.SetLabel('Test 2')

app = wx.App()
MyFrame()
app.MainLoop()

我想我只是遗漏了一些东西,但我对wxpython的理解还不足以弄清楚是什么。如果有人能够启发我将非常感激:)如果有一种更简单的方法来在wxpython中创建一个没有背景的文本,那么它也会很棒。

提前谢谢!

0 个答案:

没有答案