2017-09-19 3 views
0

J'essaie de centrer le texte sur un folio A4 normal, les tailles obtenues sont correctes mais pas centrées et je ne sais pas quelle est la raison, ici je vous montre le codePyQt: Centre QPainter texte avec drawText dans QPrinter

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() 

Comme vous pouvez le voir, je reçois la largeur de la taille d'un point de type folio et de mettre toute la largeur du folio ne correspond pas uniformément

Répondre

0

QPrinter utilise différents types de units of measure:

QPrinter.Unit

Ce type d'énumération est utilisé pour spécifier l'unité de mesure pour les formats de page et de papier.

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

Lorsque vous obtenez la taille par la méthode paperSize() vous demandez en unités QPrinter.Point, mais QPainter utilise les coordonnées en pixels, soit QPrinter.DevicePixel de sorte que la largeur obtenue est différente de la largeur en pixels , pour résoudre cela si nous changeons simplement le type d'unités de mesure comme indiqué ci-dessous:

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() 
+0

merci, est correct – Francisco