[PyQt] Problem with QGraphicsView and Scale
Cyril Giraudon
cyril.giraudon at free.fr
Mon Jul 9 16:11:31 BST 2012
Hello,
My system is win7 and I use PyQt version 4.8.5 on Qt 4.7.3.
Seems there is a bug with QGraphicsView and scaling capability.
Consider the script below. It is a simple circle in a view.
The program can take a parameter : 1 <= the scale <= 1000 (for instance).
When scale = 1 (python script.py 1), the circle is selected only when
the circle is clicked.
When scale = 1000 (python script.py 1000), the circle is selected when
the mouse is in the top left quart plane relative to the circle
x < 0
y < 0
Is this a known issue ?
Best regards,
Cyril.
# script.py [scale]
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtCore import Qt
from PyQt4.QtGui import (QApplication, QGraphicsScene,
QGraphicsView, QGraphicsEllipseItem,
QPainter, QBrush)
class Circle(QGraphicsEllipseItem):
def __init__(self, parent=None):
super(Circle, self).__init__(-50., -50., 100., 100., parent=parent)
self.setFlag(self.ItemIsSelectable , True)
self.setFlag(self.ItemIsMovable, True)
self.setBrush(QBrush(Qt.red))
if __name__ == "__main__":
from PyQt4.QtCore import QT_VERSION_STR, PYQT_VERSION_STR
print "PyQt version : ", PYQT_VERSION_STR
print "Qt version : ", QT_VERSION_STR
app = QApplication(sys.argv)
scale = float(sys.argv[1]) if len(sys.argv)>1 else 1.
scene = QGraphicsScene()
fc = Circle(parent=None)
fc.setScale(1/scale)
scene.addItem(fc)
view = QGraphicsView(scene)
view.scale(scale, scale)
view.setRenderHints(QPainter.Antialiasing)
view.show()
app.exec_()
sys.exit()
More information about the PyQt
mailing list