2

背景のないサブクラスを作ろうとしwx.StaticTextています。背景のアルファコンポーネントをSetBackgroundColorで設定したり、運が悪かったさまざまなオブジェクトで使用SetTransparentしたりしましたが、それは私が初心者だからかもしれません:)

とにかく、私はサブクラス化して、背景がペイントされないようにメソッドwx.StaticTextを変更し、この新しいメソッドにバインドすることになりました。OnPaintEVT_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で背景のないテキストを作成するもっと簡単な方法があれば、それも素晴らしいでしょう。

前もって感謝します!

4

0 に答える 0