[PyQt] No output from QSvgGenerator

David Boddie dboddie at trolltech.com
Tue May 27 18:00:02 BST 2008


On Tue May 27 17:00:23 BST 2008, Luke Campagnola wrote:

> class GraphicsView(QtGui.QGraphicsView):
> 
>   [ ... ]
> 
>   def writeSvg(self, fileName):
>       self.svg = QtSvg.QSvgGenerator()
>       self.svg.setFileName(fileName)
>       self.svg.setSize(self.size())
>       self.svg.setResolution(600)
>       self.painter = QtGui.QPainter(self.svg)
>       self.render(self.painter)
> 
> When I run writeSvg(), an empty file is created. If I try to run the
> function again, it complains that paint devices can not be deleted
> while being painted on.

You need to "close" the painter, either by making "painter" a local
variable or by wrapping render() in calls to the painter's begin()
and end() methods.

Either

      [ ... ]
      painter = QtGui.QPainter(self.svg)
      self.render(self.painter)

or

      [ ... ]
      self.painter = QtGui.QPainter()
      self.painter.begin(self.svg)
      self.render(self.painter)
      self.painter.end()

Since you probably don't need to make "painter" an instance variable, the
first option is probably the way to go.

David
-- 
David Boddie
Lead Technical Writer, Trolltech ASA


More information about the PyQt mailing list