à tous,

Je bute sur un problème à priori simple mais avec lequel je m'arrache les cheuveux : l'émission et la réception de signaux personnalisés avec PyQt5. Je sais que ce dernier point (PyQt5) risque d'en coincer quelques uns, mais sait-on jamais .

L'idée est simple : j'ai 3 scripts Python. Le premier appel une fonction du deuxième qui émet un signal qui doit être capté par le troisième.

script 1 (main.py) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
from child1 import Child1
 
Child1().connect_and_emit_signal()
script 2 (child1.py) :
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
from PyQt5.QtCore import QObject, pyqtSignal
 
class Child1(QObject):
    def __init__(self, parent=None):
        super(Child1, self).__init__(parent)
 
    signal = pyqtSignal()
    signal2 = pyqtSignal()
    signal3 = pyqtSignal()
 
    def connect_and_emit_signal(self):
        self.signal.connect(self.handle_signal)
        self.signal2.connect(Child1_1().handle_signal)
 
        self.signal.emit()
        self.signal2.emit()
        self.signal3.emit()
 
    def handle_signal(self):
        print ("signal received")
 
class Child1_1(QObject):
    def handle_signal(self):
        print ("signal2 received")
script 3 (child2.py) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
from PyQt5.QtCore import QObject, pyqtSignal
 
from child1 import Child1
 
class Child2(QObject):
    def __init__(self, parent=None):
        super(Child2, self).__init__(parent)
 
        Child1().signal3.connect(self.handle_signal)
 
    def handle_signal(self):
        print ("signal3 received")
Le code est très raccourci, et pour diverses raisons j'aimerai éviter d'avoir à supprimer l'import de child1 dans child2 au profit de l'inverse, ce qui simplifierai grandement les choses mais qui serait nettement moins drôle .

Il me semble avoir déjà fait ça avec PyQt4, mais la syntaxe SLOT et SIGNAL a pas mal changé avec la version 5, du coup je bloque

Une idée ?

Merci à tous par avance.

J