PYQT Drawing on top of QGraphicsPixmapItem picture

Viewed 1079

Hello I'm having some trouble getting QPainter to draw on top of a photo that has been loaded into a QGraphicsPixmapItem

Goal

I would like to be able to draw a circle on top of a picture that has been loaded into QGraphicsPixmapItem everytime the mouse is clicked. Also, I would like to be able to keep track of the circles so that if the user wishes to delete or move one or all of them later they can. I was thinking a list or directory. I don't know which would be more appropriate.

Any help will be greatly appreciated!

Current GraphicsArea.py file

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from GraphicsArea_GUI import *
from QGraphicsView import *


class LogObject(QObject):
    MousePixmapSignal = pyqtSignal(QPoint, QColor)
    pointDraw = pyqtSignal(QPoint)

class PictureItem(QGraphicsPixmapItem):

    def __init__(self, log,*args, **kwargs):
        QGraphicsPixmapItem.__init__(self,*args, **kwargs)
        self.setAcceptHoverEvents(True)
        self.log = log


    def hoverMoveEvent(self, event):
        point = event.pos().toPoint()
        color = QColor(self.pixmap().toImage().pixel(point.x(), point.y()))
        self.log.MousePixmapSignal.emit(point, color)
        QGraphicsPixmapItem.hoverMoveEvent(self, event)

    def hoverEnterEvent(self, event):
        QApplication.setOverrideCursor(Qt.CrossCursor)
        QGraphicsPixmapItem.hoverMoveEvent(self, event)

    def hoverLeaveEvent(self, event):
        QApplication.setOverrideCursor(Qt.ArrowCursor)
        QGraphicsPixmapItem.hoverLeaveEvent(self, event)

    def mousePressEvent(self,event):
        point = event.pos().toPoint()
        self.log.pointDraw.emit(point)
        QGraphicsPixmapItem.mousePressEvent(self, event)

class LoadPicture(QWidget, Ui_GraphicsArea):
    def __init__(self, pixmap, parent=None):
        QWidget.__init__(self, parent)
        self.setupUi(self)
        self.pixmap = pixmap
        self.log = LogObject(self)
        self.scene = self.PictureArea.setScene(QGraphicsScene())
        self.item = PictureItem(self.log,pixmap)
        self.PictureArea.scene().addItem(self.item)
        self.resize(pixmap.size())
        self.log.pointDraw.connect(self.drawCircle)


    def drawCircle(self,pos):
        pen = QPen(QColor(Qt.red))
        ellipse = QGraphicsEllipseItem(-5,5,10,-10)
        ellipse.setPen(pen)
        self.PictureArea.scene().addItem(ellipse)
        ellipse.setPos(pos.x(),pos.y())
0 Answers
Related