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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| #!/usr/bin/python
# -*- coding: utf-8 -*-
# Python 3
"""
Affiche une image dans un QGraphicsScene/QGraphicsView et la déplace avec
la souris
"""
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
# importation du fichier issu de QtDesigner après traitement par pyuic
from test01_ui import Ui_MainWindow
#############################################################################
class ItemImage(QtWidgets.QGraphicsPixmapItem):
#========================================================================
def __init__(self, pixMap, parent=None):
super().__init__(parent)
self.pixMap = pixMap
self.setPixmap(self.pixMap)
# configure pour qu'on puisse bouger l'image
self.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable |
QtWidgets.QGraphicsItem.ItemIsFocusable)
self.old_X, self.old_Y = 0, 0
#========================================================================
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 Fenetre(QtWidgets.QMainWindow):
#========================================================================
def __init__(self, parent=None):
super().__init__(parent)
# prise en compte de ce qui vient de QtDesigner
# après, les 2 widgets dessinés sont disponibles par
# self.ui.pushButton, et self.ui.view
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# assure le lien entre le bouton et la méthode à exécuter
self.ui.pushButton.clicked.connect(self.addBus)
# création de la scene, et lien entre le QGraphicsView et le QGraphicsScene
self.scene = QtWidgets.QGraphicsScene()
self.ui.view.setScene(self.scene)
def addBus(self):
"""ajoute l'image dans le QGraphicsScene et l'affiche grâce au QGraphicsView
"""
fichierImage = "image01.jpg"
pixMap = QtGui.QPixmap(fichierImage)
pixMap = pixMap.scaledToWidth(150, QtCore.Qt.SmoothTransformation)
self.itemImage = ItemImage(pixMap)
self.scene.addItem(self.itemImage)
#############################################################################
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
fen = Fenetre()
fen.show()
sys.exit(app.exec_()) |
Partager