pyqt:qprinter中带有绘制文字的中心qpainter文本



我试图将文本集中在普通A4大小的作品集上,所获得的尺寸是正确的,但不居中,我不知道原因是什么,我在这里向您展示代码

from PyQt4.QtGui import QPrinter,QPainter,QApplication
from PyQt4.QtCore import Qt,QRectF
import sys
app = QApplication(sys.argv)
printer = QPrinter()
painter = QPainter()
printer.setOutputFileName("prueba.pdf")
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setPageMargins(0.0,0.0,0.0,0.0,1)
printer.setFullPage(True)
margin = printer.getPageMargins(1)
print margin
size = printer.paperSize(1)
width = size.width()
print width
painter.begin(printer)
painter.drawText(QRectF(0.0,0.0,width,50.0),Qt.AlignCenter|Qt.AlignTop,"abcdefghijklmn")
painter.end()

您可以看到,我得到了对开本类型点的大小的宽度,并将整个作品集的宽度不均匀

QPrinter使用不同类型的度量单位:

qprinter.unit

此枚举类型用于指定页面和纸张尺寸的测量单元。

Constant  Value
QPrinter.Millimeter   0
QPrinter.Point        1
QPrinter.Inch         2
QPrinter.Pica         3
QPrinter.Didot        4
QPrinter.Cicero       5
QPrinter.DevicePixel  6

当您通过paperSize()方法获得大小时,您是在QPrinter.Point单元中要求它的,但是QPainter使用像素中的坐标,也就是说,QPrinter.DevicePixel,因此所获得的宽度与像素的宽度不同,以解决,如果我们求解,如果我们求解,如果我们是我们的求解。只需更改测量单元的类型,如下所示:

app = QApplication(sys.argv)
printer = QPrinter()
painter = QPainter()
printer.setOutputFileName("prueba.pdf")
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setPageMargins(0.0, 0.0, 0.0, 0.0, QPrinter.Point)
printer.setFullPage(True)
margin = printer.getPageMargins(QPrinter.Point)
print(margin)
size = printer.paperSize(QPrinter.DevicePixel)
width = size.width()
print(width)
painter.begin(printer)
painter.drawText(QRectF(0.0,0.0,width,50.0), Qt.AlignCenter|Qt.AlignTop, "abcdefghijklmn")
painter.end()

最新更新