Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/11/2021, à 17: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 smile

Donut

Dernière modification par DonutMan75 (Le 16/11/2021, à 17:22)

Hors ligne

#2 Le 16/11/2021, à 17: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, à 17:22)

Hors ligne