4

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() アプローチを使用してみましたが、役に立ちませんでした。

4

1 に答える 1

8

私は自分の問題を理解しました - ペインターを削除するのを忘れていました。最後に「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
于 2013-09-26T06:23:59.987 に答える