Я пытаюсь создать подкласс wx.StaticText
без фона. Я попытался установить альфа-компонент фона с помощью 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 недостаточно для того, чтобы понять, что именно. Буду очень признателен, если кто-то сможет меня просветить :) И если в wxpython есть более простой способ иметь текст без фона, то это было бы здорово.
Заранее спасибо!