Python 在PyQt中打印图像时出错
我试图在PyQt中打印一个小部件,但得到了一个错误:“QPaintDevice:无法销毁正在绘制的绘制设备”。我认为问题在于我的方法结束了,因此在画家完成绘制pixmap之前,qpaint设备就被破坏了。然而,我不知道如何让画家慢下来 我的方法的代码如下所示:Python 在PyQt中打印图像时出错,python,printing,pyqt,Python,Printing,Pyqt,我试图在PyQt中打印一个小部件,但得到了一个错误:“QPaintDevice:无法销毁正在绘制的绘制设备”。我认为问题在于我的方法结束了,因此在画家完成绘制pixmap之前,qpaint设备就被破坏了。然而,我不知道如何让画家慢下来 我的方法的代码如下所示: def printer(self): "Prints the current diagram" # Create the printer printerobject = QtGui.QPrinter(0)
def printer(self):
"Prints the current diagram"
# Create the printer
printerobject = QtGui.QPrinter(0)
# Set the settings
printdialog = QtGui.QPrintDialog(printerobject)
if printdialog.exec_() == QtGui.QDialog.Accepted:
# Print
pixmapImage = QtGui.QPixmap.grabWidget(self.contentswidget)
painter = QtGui.QPainter(printerobject)
painter.drawPixmap(0, 0, pixmapImage)
无论如何,我尝试了使用.begin()和.end()方法,但都没有成功。我解决了我的问题——我忘了删除画师,事后看来这是显而易见的(不是总是这样吗?)。在末尾添加“del painter”可以使代码正常工作。以下是工作代码:
def printer(self):
"Prints the current diagram"
# Create the printer
printerobject = QtGui.QPrinter(0)
# Set the settings
printdialog = QtGui.QPrintDialog(printerobject)
if printdialog.exec_() == QtGui.QDialog.Accepted:
# Print
pixmapImage = QtGui.QPixmap.grabWidget(self.contentswidget)
painter = QtGui.QPainter(printerobject)
painter.drawPixmap(0, 0, pixmapImage)
del painter
必须添加“del painter”并不明显,因为它不是Pythonic。感谢您发现了这个问题,我也遇到了同样的问题。通常,python垃圾回收器应该处理这个问题。必须是某种竞争条件。您应该使用
painter.end()