2013-09-25 45 views
3

我試圖在PyQt中打印一個小部件,但得到錯誤「QPaintDevice:無法銷燬正在繪製的繪製設備」。我認爲問題是我的方法結束了,因此qPaintDevice被銷燬,然後畫家完成了繪製像素圖。然而,我不知道如何減緩畫家的速度。在PyQt中打印圖像時出錯

我的方法的代碼是在這裏:

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關於()的辦法,但無濟於事。

回答

6

我想出了我的問題 - 我忘了刪除這位畫家,事後看來這顯然很明顯(不是總是這樣嗎?)。添加「del畫家」到最後使代碼工作。這裏是工作代碼:

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 
+1

不得不添加'del painter'是*不明顯,因爲它不是Pythonic。感謝您發現此問題,我遇到了同樣的問題。 – EvertW

+0

通常,python垃圾收集器應該照顧這個。 必須是一些競爭條件.. – pixelbrei

+3

而不是使用'del painter'你應該改用'painter.end()' – swinman