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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| """
Affiche une image dans un QGraphicsScene/QGraphicsView et la déplace avec
la souris
Avec aide de:
http://vincent-vande-vyvre.developpez.com/tutoriels/pyqt/qgraphicsitem/
"""
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#############################################################################
class ItemImage(QtWidgets.QGraphicsPixmapItem):
#========================================================================
def __init__(self, pixMap, parent=None):
super().__init__(pixMap, parent)
# configure pour qu'on puisse bouger l'image
self.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable |
QtWidgets.QGraphicsItem.ItemIsFocusable)
#========================================================================
def mousePressEvent(self, event):
"""permet de sauvegarder la position de la souris au clic gauche
"""
pos = event.scenePos()
if event.button() == 1:
self.old_X, self.old_Y = pos.x(), pos.y()
event.accept()
else:
event.ignore()
#========================================================================
def mouseMoveEvent(self, event):
"""déplace l'image avec la souris
"""
pos = event.scenePos()
X, Y = pos.x(), pos.y()
delta_X, delta_Y = X - self.old_X, Y - self.old_Y
self.moveBy(delta_X, delta_Y)
self.old_X, self.old_Y = X, Y
event.accept()
#############################################################################
class GraphicsView(QtWidgets.QGraphicsView):
#========================================================================
def __init__(self, parent=None):
super().__init__(parent)
self.resize(400, 300)
self.scene = QtWidgets.QGraphicsScene(self)
fichierImage = "image01.jpg"
self.pixMap = QtGui.QPixmap(fichierImage)
self.pixMap = self.pixMap.scaledToWidth(150, QtCore.Qt.SmoothTransformation)
self.itemImage = ItemImage(self.pixMap)
self.scene.addItem(self.itemImage)
self.setScene(self.scene)
#############################################################################
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
graphicsView = GraphicsView()
graphicsView.show()
sys.exit(app.exec_()) |
Partager