2

1週間の絶え間ない失敗の後、私はまだ簡単なタスクを実行できません.アルファチャンネルまたは白い背景を持つpngをロードし(以下の例で)、wx.StaticBitmapで透明度を維持します.

これは、後で wx.panel で必要になります。このように、または類似したままにする必要があります。

これは私のアプローチの1つです(白い背景):

def __init__(self, parent):
    wx.Panel.__init__(self, parent)
    self.loc = wx.Image("intro/image.png",wx.BITMAP_TYPE_PNG).ConvertToBitmap()
    z = wx.Mask(self.loc, wx.WHITE) 
    self.loc.SetMask(z) 
    self.locopic = wx.StaticBitmap(self, -1, self.loc, (0, 0))

私はこのトピックについてたくさん読みました。私はゴミです。ごめん。ここで明らかな何かを見逃していると思います。wx.Mask ,透過画像

アップデート:

WorkinWithImagesにある例を使用して、ここまで到達できました。

import ImageConversions
...

    puFilename = "intro/imagealpha.png"
    pilImage = Image.open( puFilename )
    pilImageWithAlpha = ImageConversions.WxImageFromPilImage( pilImage, createAlpha=True )
    self.puWxBitmap = pilImageWithAlpha.ConvertToBitmap()
    self.locopic = wx.StaticBitmap(self, -1, self.puWxBitmap)

これは、アルファ チャネルを使用して PNG から透明な wx.image を作成していますが、wx.StaticBitmap では、透明度が必要な場所に醜い黒色が表示されます。これは私を駆り立てています。助けてください!

適切な場所に透明度のある画像を wx.panel に表示できれば、コミュニティに感謝します!

4

1 に答える 1

4

python SOチャットで議論されているように:

class MyPanel(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.Bind(wx.EVT_PAINT, self.OnPaint)

        self.loc = wx.Bitmap("intro/image.png")

    def OnPaint(self, evt):
        dc = wx.PaintDC(self)
        dc.SetBackground(wx.Brush("WHITE"))

        # ... drawing here all other images in order of overlapping
        dc.DrawBitmap(self.loc, 0, 0, True)

トリックは、重なっているすべての画像をwx.PaintDC.

さらに、ファイル システムから PNG をロードするwx.Bitmap代わりに使用する方が便利です。wx.Image(..., wx.BITMAP_TYPE_PNG).ConvertToBitmap()

于 2013-04-02T13:33:11.130 に答える