2

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

无论如何,我结束了子类wx.StaticText化,修改了OnPaint方法以便不绘制背景,并绑定EVT_PAINT到这个新方法。

它在大多数情况下工作得很好(当应用程序启动时,或者当它被另一个窗口隐藏后重新绘制时),但是每当我SetLabel在我的子类的实例上使用该方法时,调用StaticText的不是我的方法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 的理解还不足以弄清楚是什么。如果有人能启发我将不胜感激

先感谢您!

4

0 回答 0