Bonjour,

J'essaie de comprendre comment se propagent les event dans pyqt5

contexte :
======
Je souhaite interactivement tracer des formes (QGraphicsEllipseItem par exemple) au sein d'un QGraphicsScene,
puis pouvoir déplacer ces formes à l'aide de la souris.
Donc interagir avec ma scene et mon ellipse par le biais d'un event mousePressEvent propre à chacun.
Seulement, la scene reçoit bien l'event, mais je n'arrive pas à le propager à l'object ellipse

Piste :
=====
Il me semble qu'il soit possible de contrôler le mécanisme de propagation avec les fonctions accept et ignore, mais sans résultats

Voici les deux objets:
==============
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
 
from PyQt5 import QtCore, QtGui, QtWidgets

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class MyGraphicScene(QtWidgets.QGraphicsScene):
 
    def __init__(self, parent):
        super(MyGraphicScene, self).__init__()
        self.setSceneRect(0,0,600,400)
        self.clear()
 
        self.wait_for_input = False
 
    def mousePressEvent(self, e):
        e.accept()
        print('')
        print(' --- new event --- ')
        print('click on scene')
        print(f'wait for input : {self.wait_for_input}')
 
        if self.wait_for_input :
            e.accept()
            ellipse = MyEllipse(e.scenePos().x(), e.scenePos().y(), 70, 70)
            self.addItem(ellipse)
            print(ellipse)
            self.wait_for_input = False
        else:
            e.ignore()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
class MyEllipse(QtWidgets.QGraphicsEllipseItem):
 
    def __init__(self, x, y, w, h):
        super(MyEllipse, self).__init__(x, y, w, h)
        self.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable)
 
        self.pen=QtGui.QPen(QtGui.QColor(QtCore.Qt.green))
        self.pen.setWidth(15)
        self.setPen(self.pen)
 
    def mousePressEvent(self, e):
        print('click on ellipse')
Retour de la console lors de l’exécution :
=========================
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
button clicked  # variable wait_for_input à True
ringgraphBtn 
 
 --- new event --- # création de l'ellipse à l'endroit du clic sur la scene
click on scene
wait for input : True
<previewgraphicscene.MyEllipse object at 0x7efcd25a5670>
 
 --- new event ---  # clic (unique) sur l'ellipse
click on scene
wait for input : False
 
 --- new event --- # double clic sur l'ellipse
click on scene
wait for input : False
click on ellipse
Pouvez vous me dire ce que j'ai mal compris?