代码之家  ›  专栏  ›  技术社区  ›  Francisco

PyQt:将QPrinter文本与QPrinter中的drawText居中

  •  0
  • Francisco  · 技术社区  · 8 年前

    我试图把文本集中在一个普通的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()
    

    正如你们所看到的,我得到了一个对开本类型点的宽度,并且放置对开本的整个宽度并不均匀

    1 回复  |  直到 8 年前
        1
  •  0
  •   eyllanesc    8 年前

    QPrinter 使用不同类型的 units of measure :

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