我正在尝试创建一个没有背景的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中创建一个没有背景的文本,那么它也会很棒。
提前谢谢!