我正在尝试创建一个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 的理解还不足以弄清楚是什么。如果有人能启发我将不胜感激
先感谢您!