Bonjour à tous
Comme dit dans le titre, j'ai découvert (si ça se trouve ça fait 15 ans que tout le monde le sait) qu'il y a une différence entre la connexion signal/slot classique (QObject.connect(item, signal, slot)) et la nouvelle syntaxe de connexion (item.signal.connect(slot)). En effet, dans la première syntaxe le slot est appelé sans paramètre alors que dans la seconde il reçoit un paramètre "False"
Exemple
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 #!/usr/bin/env python # coding: utf-8 import sys from sip import * from PyQt4.QtCore import * from PyQt4.QtGui import * def slotBtn(*args, **kwargs): print "args=", args app=QApplication(sys.argv) main=QMainWindow() main.setCentralWidget(QWidget(main)) btn1=QPushButton("Slot classique") QObject.connect( btn1, SIGNAL("clicked()"), slotBtn, ) btn2=QPushButton("PySignal") btn2.clicked.connect(slotBtn) layout=QVBoxLayout(main.centralWidget()) layout.addWidget(btn1, 0) layout.addWidget(btn2, 0) main.show() app.exec_()
Comme vous le voyez dans cet exemple minimaliste, la même fonction est connectée à deux boutons distincts chacun par une syntaxe particulière. Lors de l'appui sur le premier bouton, la fonction ne reçoit rien mais si on clique sur le second, elle reçoit "False".
Je dois dire que ça m'embête un peu car je comptais parfois sur le fait qu'un slot ne reçoive rien pour l'appeler manuellement avec des trucs et détecter donc s'il était appelé par un signal ou bien par moi.
Est-ce que quelqu'un aurait une explication, voire même essayer de reproduire le comportement initial avec la nouvelle syntaxe ? Surtout qu'avec Qt5 l'ancienne syntaxe n'existe plus.
En vous remerciant
Partager