wxPythonのPaintDCでアンチエイリアスや透過を使う

メモがわりかつ日本語のサンプルがなかったので。

まず、通常どおりにPaintDCを使った場合
#coding: utf-8

import wx

class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, size=(200,200))
self.Bind(wx.EVT_PAINT, self.OnPaint)

def OnPaint(self, event):
dc = wx.PaintDC(self)
dc.DrawEllipse(10, 10, 100, 100)

if __name__ == "__main__":
app = wx.App(0)
frame = Frame()
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()

表示は以下のようにギザギザとしたものになる。
paintDC_before.png

次に、GCDCを通してPaintDCを使ってみる(OnPaintの部分を以下のように変更)。
    def OnPaint(self, event):
pdc = wx.PaintDC(self)

try:
dc = wx.GCDC(pdc)
except:
dc = pdc

dc.DrawEllipse(10, 10, 100, 100)


すると、以下のようにアンチエイリアスがかかった表示になる。
paintDC_after.png

透過もできる。
    def OnPaint(self, event):
pdc = wx.PaintDC(self)

try:
dc = wx.GCDC(pdc)
except:
dc = pdc

#red
dc.SetBrush(wx.Brush(wx.Colour(255, 0, 0, 64)))
dc.DrawEllipse(10, 10, 100, 100)

#blue
dc.SetBrush(wx.Brush(wx.Colour(0, 0, 255, 64)))
dc.DrawEllipse(30, 60, 100, 100)

#green
dc.SetBrush(wx.Brush(wx.Colour(0, 255, 0, 64)))
dc.DrawEllipse(60, 10, 100, 100)


表示。
paintDC_tr.png





posted by 右京 | Python
blog comments powered by Disqus
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。