#1 Le 16/11/2021, à 16:15
- DonutMan75
[RESOLU] PyQt5 : une connection de signal qui ne fonctionne pas ??
Bonjour à tous,
je souhaite enclencher une action lorsqu'un utilisateur change l'item sélectionné d'une QComboBox...
Je me calque sur le modèle MVC fortement suggéré dans le livre de Benoît Prieur "PyQt5, développez vos interfaces graphiques en Python".
Voici un code minimal fonctionnel avec une QComboBox à trois élements. On affiche "coucou" dès que l'utilisateur sélectionne un item de la ComboBox.
from PyQt5.QtWidgets import *
def modele():
pass
class mainwin(QWidget):
def __init__(self):
super().__init__()
self.selector = QComboBox(self)
self.selector.addItems(['un', 'deux', 'trois'])
self.show()
class controleur():
def __init__(self, modele, vue):
self._evaluation = modele
self._vue = vue
self.connectionSignaux()
def connectionSignaux(self):
self._vue.selector.currentIndexChanged.connect(lambda: print('coucou'))
print('Signaux connectes...')
if __name__ == '__main__':
app = QApplication([])
vue = mainwin()
controleur(modele, vue)
app.exec_()
Or si je souhaite définir une fonction au sein de la classe controleur qui sera appelée par le signal, cette fois-ci ça ne marche plus ! (et il n'y a aucun message d'erreur ?!!).
class controleur():
def __init__(self, modele, vue):
self._evaluation = modele
self._vue = vue
self.connectionSignaux()
def connectionSignaux(self):
self._vue.selector.currentIndexChanged.connect(self.update)
print('Signaux connectes...')
def update(self):
print('ce coucou ne marche plus...')
Une âme charitable pourrait-elle m'expliquer ce qu'il se passe ? :'(
Mille mercis d'avance
Donut
Dernière modification par DonutMan75 (Le 16/11/2021, à 16:22)
Hors ligne
#2 Le 16/11/2021, à 16:21
- DonutMan75
Re : [RESOLU] PyQt5 : une connection de signal qui ne fonctionne pas ??
Ok en testant je viens de trouver !
Le controleur n'est pas sauvegardé dans une variable donc l'appel à une de ses méthodes échoue !
il faut faire :
c = controleur(modele, vue)
Le fait de poser tout ça à plat ici m'a permis de le voir !
Au passage, il y a donc une erreur dans le livre en question puisque l'auteur fait pareil...
Désolé pour le dérangement du coup...
D.
Dernière modification par DonutMan75 (Le 16/11/2021, à 16:22)
Hors ligne