Python 在PyQt中打印图像时出错

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)

我试图在PyQt中打印一个小部件,但得到了一个错误:“QPaintDevice:无法销毁正在绘制的绘制设备”。我认为问题在于我的方法结束了,因此在画家完成绘制pixmap之前,qpaint设备就被破坏了。然而,我不知道如何让画家慢下来

我的方法的代码如下所示:

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()