[PyQt] Absolute size on screen

David Boddie david at boddie.org.uk
Sat May 7 18:06:15 BST 2011


On Fri, 6 May 2011 11:38:49 +0000, Pietro Moras wrote:

>  In need to ?break the ice? with PyQt4, so I dare to ask you where I could
> look for such basic a task as to express a length in absolute pixel size on
> screen, so to draw a square not subject to re-sizing and zooming. Thanks!

Take a look at the logicalDpiX() and logicalDpiY() methods of QWidget to get
a pair of coefficients. You can use these to calculate the number of pixels
needed to draw a square with dimensions defined in real-world units (like
inches or millimetres).

import sys
from PyQt4.QtGui import *

class Widget(QWidget):
    def paintEvent(self, event):
        p = QPainter()
        p.begin(self)

        # Draw a 2cm x 2cm square.
        width = self.logicalDpiX() * 2 / 2.54
        height = self.logicalDpiY() * 2 / 2.54
        p.drawRect(10, 10, width, height)

        p.end()

app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())

David


More information about the PyQt mailing list