2017-09-19 4 views
0

Ich versuche den Text auf ein normales A4 Folio zu konzentrieren, die erhaltenen Größen sind korrekt, aber es ist nicht zentriert und ich weiß nicht, was der Grund ist, hier zeige ich Ihnen der CodePyQt: Center QPainter Text mit drawText in 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() 

Wie man sehen kann ich die Breite der Größe eines Folio Typ Punkt und setzt die gesamte Breite des Folio passen

Antwort

0

QPrinter nicht gleichmäßig nutzt verschiedene Arten von units of measure erhalten:

QPrinter.Unit

Dieser Aufzählungstyp die Maßeinheit für Seite und Papiergrößen zu spezifizieren verwendet wird.

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

Wenn Sie die Größe durch die paperSize() Methode bekommen Sie es in QPrinter.Point Einheiten fragen, aber QPainter verwendet die Koordinaten in Pixeln, das heißt, QPrinter.DevicePixel so die erhaltene Breite in Pixel von der Breite unterschiedlich ist , um das zu lösen, wenn wir nur den Typ der Maßeinheiten ändern, wie unten gezeigt:

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

danke, ist richtig – Francisco