from Exporter import Exporter from pyqtgraph.parametertree import Parameter from pyqtgraph.Qt import QtGui, QtCore, QtSvg import re __all__ = ['SVGExporter'] class SVGExporter(Exporter): Name = "Scalable Vector Graphics (SVG)" def __init__(self, item): Exporter.__init__(self, item) tr = self.getTargetRect() self.params = Parameter(name='params', type='group', children=[ {'name': 'width', 'type': 'float', 'value': tr.width(), 'limits': (0, None)}, {'name': 'height', 'type': 'float', 'value': tr.height(), 'limits': (0, None)}, ]) self.params.param('width').sigValueChanged.connect(self.widthChanged) self.params.param('height').sigValueChanged.connect(self.heightChanged) def widthChanged(self): sr = self.getSourceRect() ar = sr.height() / sr.width() self.params.param('height').setValue(self.params['width'] * ar, blockSignal=self.heightChanged) def heightChanged(self): sr = self.getSourceRect() ar = sr.width() / sr.height() self.params.param('width').setValue(self.params['height'] * ar, blockSignal=self.widthChanged) def parameters(self): return self.params def export(self, fileName=None): if fileName is None: self.fileSaveDialog(filter="Scalable Vector Graphics (*.svg)") return self.svg = QtSvg.QSvgGenerator() self.svg.setFileName(fileName) self.svg.setSize(QtCore.QSize(100,100)) #self.svg.setResolution(600) #self.svg.setViewBox() targetRect = QtCore.QRect(0, 0, self.params['width'], self.params['height']) sourceRect = self.getSourceRect() painter = QtGui.QPainter(self.svg) try: self.setExportMode(True) self.render(painter, QtCore.QRectF(targetRect), sourceRect) finally: self.setExportMode(False) painter.end() ## Workaround to set pen widths correctly data = open(fileName).readlines() for i in range(len(data)): line = data[i] m = re.match(r'(