def test_controlpointrect(self): control = ControlPointRect() rect = QGraphicsRectItem(QRectF(10, 10, 100, 200)) self.scene.addItem(rect) self.scene.addItem(control) control.setRect(rect.rect()) control.setFocus() control.rectChanged.connect(rect.setRect) control.setRect(QRectF(20, 20, 100, 200)) self.assertEqual(control.rect(), rect.rect()) self.assertEqual(control.rect(), QRectF(20, 20, 100, 200)) control.setControlMargins(5) self.assertEqual(control.controlMargins(), QMargins(5, 5, 5, 5)) control.rectEdited.connect(rect.setRect) self.view.show() self.app.exec_() self.assertEqual(rect.rect(), control.rect())
class GraphicsView(QGraphicsView): rubber_band = None selection = None def __init__(self, scene, parent=None): super(GraphicsView, self).__init__(parent) self.setScene(scene) self.setRenderHint(QPainter.Antialiasing) self.setRenderHint(QPainter.TextAntialiasing) def wheelEvent(self, event): factor = 1.41 ** (-event.delta() / 240.0) self.scale(factor, factor) def __mousePressEvent(self,event): self.drag_start = event.pos() def __mouseReleaseEvent(self,event): global PIX self.drag_stop = event.pos() im = PIX.pixmap().toImage() start, stop = self.mapToScene(self.drag_start),self.mapToScene(self.drag_stop) logging.debug((start,stop)) augmented = QGraphicsPixmapItem(QPixmap(tempfile)) augmented.setOffset(rect.topLeft()) augmented.setMatrix(QMatrix()) if None != self.selectbox: self.scene().removeItem(self.selectbox) self.selectbox = augmented self.scene().addItem(self.selectbox) def mousePressEvent(self, event): self.start = event.pos() if not self.rubber_band: self.rubber_band = QGraphicsRectItem(None, self.scene()) self.rubber_band.setRect(self.mapToScene(QRect(self.start,QSize())).boundingRect()) self.scene().addItem(self.rubber_band) logging.info(self.__class__.__name__+' press') def mouseMoveEvent(self, event): if self.rubber_band: self.rubber_band.setRect(self.mapToScene(QRect(self.start,event.pos()).normalized()).boundingRect()) logging.info(self.__class__.__name__+' move') def mouseReleaseEvent(self, event): if self.rubber_band: self.doIt(self.rubber_band.rect()) self.scene().removeItem(self.rubber_band) self.rubber_band = None logging.info(self.__class__.__name__+' release') def doIt(self, rect): global PIX pix_rect = PIX.mapToItem(PIX,rect).toPolygon().boundingRect() logging.debug(pix_rect) im = PIX.pixmap().toImage() im = im.copy(pix_rect) tempfile = os.path.join(os.getenv('TMP'),str(uuid.uuid4())+'.jpg') im.save(tempfile, 'JPEG') try: coords = pil.process(tempfile) rect = QRect(QPoint(*coords[0]),QPoint(*coords[1])).normalized() logging.debug(rect) zone = QGraphicsEllipseItem(QRectF(rect)) zone = self.rubber_band.mapFromItem() self.mapFrom() self.scene().addItem(zone) except Exception, err: logging.error(err) finally: