簡體   English   中英

PyQt:使用QPrinter中的drawText將QPainter文本居中

[英]PyQt: Center QPainter text with drawText in QPrinter

我正在嘗試將文本集中在正常的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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM