【问题标题】:Error printing image in PyQt在 PyQt 中打印图像时出错
【发布时间】:2013-09-25 08:12:32
【问题描述】:

我正在尝试在 PyQt 中打印一个小部件,但收到“QPaintDevice:无法销毁正在绘制的绘图设备”的错误。我认为问题在于我的方法结束了,因此 qPaintDevice 在画家完成绘制像素图之前被销毁。但是,我不知道如何减慢画家的速度。

我的方法的代码在这里:

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() 方法,但无济于事。

【问题讨论】:

    标签: python printing pyqt


    【解决方案1】:

    我发现了我的问题——我忘了​​删除画家,事后看来这很明显(不是总是这样吗?)。在末尾添加“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 垃圾收集器应该处理这个问题。必须是某种竞争条件..
    • 你应该使用del painter而不是painter.end()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多