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
使用不同类型的 units of measure:
QPrinter.Unit
This enum type is used to specify the measurement unit for page and paper sizes.
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()
我正在尝试将文本聚焦在普通 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
使用不同类型的 units of measure:
QPrinter.Unit
This enum type is used to specify the measurement unit for page and paper sizes.
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()