wxpython: StaticText на прозрачном фоне - PullRequest
2 голосов
/ 01 февраля 2010

Я пытаюсь создать подкласс 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 есть более простой способ иметь текст без фона, то это было бы здорово.

Заранее спасибо!

...