Я пытаюсь следовать документации для печати QWidet и получаю ошибку. Когда я запускаю следующий код, я получаю QPaintDevice: Cannot destroy paint device that is being painted
.
import sys
from PyQt4 import QtGui, QtCore
class SampleApp(QtGui.QDialog):
def __init__(self):
super().__init__()
layout = QtGui.QVBoxLayout()
self.setLayout(layout)
text_editor = QtGui.QTextEdit()
layout.addWidget(text_editor)
button = QtGui.QPushButton("Print")
layout.addWidget(button)
button.clicked.connect(self.print_me)
def print_me(self):
printer = QtGui.QPrinter()
printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
printer.setOutputFileName("Test.pdf")
self.painter = QtGui.QPainter(printer)
margins = printer.getPageMargins(QtGui.QPrinter.DevicePixel)
xscale = (printer.pageRect().width() - margins[0]) / self.width()
yscale = (printer.pageRect().height() - margins[1]) / self.height()
scale = min(xscale, yscale)
self.painter.scale(scale, scale)
self.render(self.painter)
app = QtGui.QApplication(sys.argv)
ex = SampleApp()
ex.show()
sys.exit(app.exec_())
Если я изменю метод print_me () на следующий, он, тем не менее, работает (я просто теряю всю способность масштабировать рисователькурс):
def print_me(self):
printer = QtGui.QPrinter()
printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
printer.setOutputFileName("Test.pdf")
self.render(QtGui.QPainter(printer))