Use aggdraw:
here is a little bit of code to get you started… I use it to display the famous tiger.svg in an attempted project.
class Frame(object):
def init(self, parent=None, title="", shown=True, size=(800, 600)):
self._back = wx.Frame(parent=parent, title=title)
self._back.Bind(wx.EVT_SIZE, self.OnSize)
self._back.Bind(wx.EVT_ERASE_BACKGROUND, self.DoNothing)
self._back.Bind(
wx.EVT_PAINT, self.OnPaint)
self._back.SetSize(size)
self._back.Show(shown)
def DoNothing(self, evt): return None
def OnPaint(self, evt):
dc = wx.PaintDC(self._back)
offDC = wx.MemoryDC()
offDC.SelectObject(self.bmp)
w, h = self.size
dc.Blit(0, 0, w, h, offDC, 0, 0)
def OnSize(self, evt):
self.size = evt.GetSize()
self.Redraw
()
def Redraw(self):
draw = aggdraw.Draw("RGB", self.size)
svglines = file("tiger.svg").read().splitlines()[7:]
try:
i = 0
fill = "#ffffff"
stroke = "#ffffff"
width = 1.
b = aggdraw.Brush(fill)
p = aggdraw.Pen(stroke, width)
for line in svglines:
if i%3 == 0:
if "fill" in line:
fill = line[line.index("fill")+6:line.index("fill")+13]
if "stroke" in line:
stroke = line[
line.index(“stroke”)+7:line.index(“stroke”)+14]
if “width” in line:
width = float(line[line.index(“width”)+6:-2])
b = aggdraw.Brush(fill)
p = aggdraw.Pen(stroke, width)
elif i%3 ==1:
s = aggdraw.Symbol(line[11:-3])
draw.symbol((200,200), s, p, b)
i +=1
except:
import traceback
traceback.print_exc()
img = wx.EmptyImage(self.size[0], self.size[1])
img.SetData(draw.tostring())
bmp = img.ConvertToBitmap
()
self.bmp = bmp