Les signaux et les slots#
Définition#
Nous avons pu voir dans la documentation des librairies Qt et QGIS, il y a une section Signals.
Chaque objet émet très souvent un signal dès qu'une action est faite sur l'objet. Cela sert à déclencher du code Python lorsqu'un signal précis est émis.
Par exemple sur la documentation de QgsMapLayer, on peut chercher
le tableau signals.
Info
Comme on peut le voir dans la documentation CPP,
c'est désormais dans la classe QgsMapLayer et non QgsVectorLayer depuis QGIS 3.22. 🧐
La plupart des signaux sont aux passés, par exemple crsChanged, nameChanged. Cependant, certaines sont dans un
"futur" proche comme willBeDeleted.
Syntaxe#
On dit que l'on souhaite connecter un signal à une fonction/slot :
1 | |
Danger
Il ne faut pas écrire nom_de_la_fonction() car on ne souhaite pas appeler la fonction, juste connecter.
Cela sera Python, plus tard, quand le signal sera émis, que la fonction sera réellement appelée.
Exemple#
Par exemple, dans la classe QgsMapLayer, cherchons un signal qui est émis après (before) que la session d'édition
commence. Il s'agit de editingStarted.
Affichons un message à l'utilisateur lors du début et de la fin d'une session d'édition.
Tip
On profite de cet exemple pour voir comment évaluer une expression QGIS à l'aide des différents contextes.
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 | |