[PyQT] MouseEvent , déplacer et peindre
Bonjour à vous tous,
J'ai un GraphicScene défini dans une classe GraphicsView :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
class graphicsView (QGraphicsView):
def __init__ (self, AppWindow,parent=None):
super (graphicsView, self).__init__ (parent)
self._zoom = 0
#self.parent = parent
#self.scene=AppWindow.scene
self.scene = QGraphicsScene()
self.angleSlider=AppWindow.angleSlider
self.angleSlider.sliderReleased.connect(self.rotate_item)
self.setMouseTracking(True)
self.setInteractive(True)
self.coo1line=AppWindow.coo1line
self.coo2line=AppWindow.coo2line
self.coo3line=AppWindow.coo3line
self.setMouseTracking(True)
def hoverEnterEvent(self, event):
shape = QtGui.QCursor(QtCore.Qt.CrossCursor)
cursor = QtGui.QCursor(shape, -1, -1)
self.setCursor(cursor)
def wheelEvent(self, event):
self.zoom_step = 1.1
zoom_in = event.angleDelta()
if zoom_in.y() > 0:
zoom = self.zoom_step
else:
zoom = 1 / self.zoom_step
print("zoom",zoom)
self.scale(zoom, zoom)
print("view",self.scale(zoom, zoom))
def paintMarkers(self, event):
self.circleItem = QGraphicsEllipseItem(0,0,10,10)
self.circleItem.setPos(self.p.x()-self.circleItem.boundingRect().width()/2.0,
self.p.y()-self.circleItem.boundingRect().height()/2.0)
self.scene.addItem(self.circleItem)
self.circleItem.setPen(QtGui.QPen(QtCore.Qt.red, 1.5))
def mousePressEvent(self, event):
super(graphicsView, self).mousePressEvent(event)
self.setCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
self.p = self.mapToScene(event.pos())
self.paintMarkers(event)
#self.item.leftMouseButtonPressed.emit(scenePos.x(), scenePos.y())
def mouseMoveEvent(self, event):
super(graphicsView, self).mouseMoveEvent(event)
self.setCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
def mouseReleaseEvent(self, event):
super(graphicsView, self).mouseReleaseEvent(event)
self.leftClick = False |
Dans cette scène, j'affiche une première image, puis une seconde que j'aimerai déplacer à la souris.
J'aimerai aussi pouvoir rajouter des items (ellipse) en cliquant sur la scène (quand je clique pas sur la seconde image). J'arrive à faire marcher soit l'un soit l'autre.
Quand je supprime "def paintMarkers" ainsi que son appel dans MousePressEvent, je parviens à faire bouger ma seconde image. Par contre quand il est activé, je parviens à faire des petites ellipses mais je ne peux plus déplacer la seconde image.
J'ai essayé de voir du coté de itemAt, pour que lorsque qu'on clique sur la seconde image on puisse la déplacer, mais je ne parviens pas du tout à le faire fonctionner.
Auriez vous des astuces pour faire fonctionner les deux modes en même temps ?
Merci par avance à tout ceux qui m'aideront !