【发布时间】:2015-02-20 20:27:37
【问题描述】:
我正在尝试将主窗口及其小部件打印到纸上。理想情况下,它应该适合页面。 我尝试了以下代码,但无济于事!有没有人知道怎么做?
def printViewCustomer(self):
printer=QtPrintSupport.QPrinter()
dialog=QtPrintSupport.QPrintDialog(printer,self)
if (dialog.exec_()!=QtWidgets.QDialog.Accepted):
return
printWidget=self.mainViewWidget
painter=QtGui.QPainter(printer)
painter.begin(printer)
print(printer.paperRect().x())
XScale=(printer.pageRect().width()/ (printWidget.width()))
YScale=(printer.pageRect().height()/(printWidget.height()))
Scale=(min(XScale,YScale))
painter.translate((printer.paperRect().x()) + (printer.pageRect().width()/2),(printer.paperRect().y) + (printer.pageRect().height()/2))
painter.scale(Scale,Scale)
painter.translate(-1*printWidget.width()/2,-1*printWidget.height()/2)
printWidget.render(painter)
painter.end()
这是一个尝试的翻译
QPainter painter;
painter.begin(&printer);
double xscale = printer.pageRect().width()/double(myWidget->width());
double yscale = printer.pageRect().height()/double(myWidget->height());
double scale = qMin(xscale, yscale);
painter.translate(printer.paperRect().x() + printer.pageRect().width()/2,
printer.paperRect().y() + printer.pageRect().height()/2);
painter.scale(scale, scale);
painter.translate(-width()/2, -height()/2);
myWidget->render(&painter);
【问题讨论】:
-
“无济于事”究竟是什么意思?哪里失败了?
-
@ChristopherPeterson 嗨,这是我得到的错误,我怀疑它的原因是我对 C++ 没有任何了解,并试图翻译上面的内容,但弄错了!
Traceback (most recent call last): painter.translate((printer.paperRect().x()) + (printer.pageRect().width()/2),(printer.paperRect().y) + (printer.pageRect().height()/2)) TypeError: unsupported operand type(s) for +: 'builtin_function_or_method' and 'float'
标签: python printing pyqt pyqt5