Printing a file

David Boddie davidb at mcs.st-and.ac.uk
Wed Mar 1 12:10:20 EST 2006


Fabian Steiner wrote:

> This is what I have so far:
>
> app = QApplication(sys.argv)
> printer = QPrinter(QPrinter.PrinterResolution)
> if printer.setup():
>      printer.setPageSize(printer.A4)
>      painter = QPainter(printer)
>      metrics = QPaintDeviceMetrics(painter.device())
>      marginHeight = 6
>      marginWidth =  8
>      body = QRect(marginWidth, marginHeight, metrics.widthMM() - 2 *
> marginWidth, metrics.heightMM() - 2 * marginHeight)
>      painter.drawRect(body)
>      painter.end()
>
> Doing so I hoped to get a rectangle which is as big as an A4 paper (with
> a small border), but unfortunately it is much smaller.

Surely you meant to use

body = QRect(marginWidth, marginHeight,
             metrics.width() - 2 * marginWidth,
             metrics.height() - 2 * marginHeight)

> Moreover, I ask myself whether it is necessary that in order to write
> text on the paper, I always have to pass the proper x, y values to
> QPainter.drawText().
> Isn't there any other possibility? How do I get these values?

That depends on what kind of text you're drawing (paragraphs of text
vs. simple labels). See the application.py example in the examples3
directory of the PyQt3 distribution for code that implements a simple
text editor with support for printing. Information about text and font
metrics can be found with the QFontMetrics class:

http://doc.trolltech.com/3.3/qfontmetrics.html

PyQt4 supports Qt 4's new rich text facilities, so it's easier to
format text for printing than it is in Qt 3. A more advanced rich text
editor is only available in the C++ Qt 4 demos, but there are other
examples bundled with PyQt4 that show how to print "simple" documents:

http://www.riverbankcomputing.co.uk/

Finally, it's worth pointing out that there's a higher concentration of
people with experience in these matters reading the PyQt/PyKDE mailing
list:

http://mats.imk.fraunhofer.de/mailman/listinfo/pykde

Good luck with your printing,

David




More information about the Python-list mailing list