Bonjour,

j'ai un problème qui me semble basique mais mon code ne fonctionne pas. J'ai essayé de le modifier mais soit le signal n'est pas émis, soit le signal n'arrive pas au slot...

Résumé:

- Python3.x

- Une classe Emitter qui émet un signal. (seul le "signal0" est utilisé)

- Une classe Receiver qui doit recevoir le signal.

- Une classe TestDialog qui est un GUI contenant deux boutons (seul le bouton 1 sert). Un appui sur Button1 fait emmètre un signal par l'instance de classe Emitter (qui s'appelle donc "emitter"). Notez le connect() dans l'__init__() dans la classe Receiver.

Problème: pas de signal reçu dans l'instance de classe Receiver.

Code python : 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
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
 
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
 
class TestDialog(QtGui.QDialog):
    def __init__(self, parent = None):
        super(TestDialog, self).__init__(parent)
 
        #GUI stuffs
        self.button1 = QtGui.QPushButton("Button1")
        self.connect(self.button1, QtCore.SIGNAL("clicked()"), self.on_button1)        
        self.button2 = QtGui.QPushButton("Button2")
        self.connect(self.button2, QtCore.SIGNAL("clicked()"), self.on_button2)        
 
        self.HBox = QtGui.QHBoxLayout()
        self.HBox.addWidget(self.button1)
        self.HBox.addWidget(self.button2)
 
        self.setLayout(self.HBox)
 
        # classes that emit and receive signals.
        self.emitter = Emitter()
        self.receiver = Receiver(self.emitter)        
 
 
    def on_button1(self):
        ''' Emit signal0 from emitter '''
        self.emitter.emit_sig0()
 
    def on_button2(self):
        pass
 
class Emitter(QtCore.QObject):
    ''' Class that emits a signal'''
 
    signal0 = QtCore.pyqtSignal()
    signal1 = QtCore.pyqtSignal(int)
 
    def __init__(self, parent = None):
        super(Emitter, self).__init__(parent)
 
    def emit_sig0(self):
        ''' Emits signal0 '''
 
        print("Emitting signal0")
        self.signal0.emit()
 
 
class Receiver(QtCore.QObject):
    ''' Class that receives signals '''
 
    def __init__(self, emitter):
        self.emitter = emitter
 
        # connect to signal0        
        self.emitter.signal0.connect(self.receive_signal0)        
 
    def receive_signal0(self):
        ''' Receives signal0 '''
        print("Signal0 received !")
 
 
 
def main(argv):
    app = QtGui.QApplication(argv)
 
    form = TestDialog()
 
    form.show()
 
    app.exec_()    
 
if __name__ == '__main__':
    main(sys.argv)

Hmmm si quelqu'un voit d'où peut venir le problème... Je me sens bête, je vois pas d'où ça peut venir. C'est surement une broutille mais...

Merci beaucoup