IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Liste d'objets et évènements


Sujet :

PyQt Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire d'environnement et coordinateur technique de projet
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire d'environnement et coordinateur technique de projet

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Liste d'objets et évènements
    Bonjour,

    Je suis face à un problème qui me bloque…
    J'ai une liste d'objet (qcombobox) généré dynamiquement et je souhaite récupérer les évènements type currentIndexChanged, ça fonctionne mais l'objet récupéré n'est pas le bon.

    Le code génération de la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        …
            self.tableWidget.setRowCount(len(data)-1)
            self.tableWidget.setColumnCount(Col_POQ+1)
            self.tableWidget.setHorizontalHeaderLabels(data[0])
            for i in range(1, len(data)):
                for j in range(Col_POQ):
                    if j == Col_Statut:
                        self.list_combo.append(QtWidgets.QComboBox())
                        size = len(self.list_combo) - 1
                        self.list_combo[size].addItems(STATUT)
                        index = self.list_combo[size].findText(data[i][j])
                        self.list_combo[size].setCurrentIndex(index)
                        self.tableWidget.setCellWidget(i-1, j, self.list_combo[size])
    Le code gestion des events
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for self.i in self.list_combo:
                self.i.currentIndexChanged.connect(self.copy_to_history)

    La fonction appelée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def copy_to_history(self):
            print(self.i.currentText())
    La fonction est appelé correctement mais le texte affiché est mauvais.

    Merci

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Je suppose que le texte obtenu est le texte courant de la dernière combo crée. Et c'est normal puisque self.i est la dernière créée dans ta boucle.

    Place ta connexion dans la boucle de création.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            for i in range(1, len(data)):
                for j in range(Col_POQ):
                    if j == Col_Statut:
                        cb = QtWidgets.QComboBox()
                        cb.currentIndexChanged[str].connect(self.copy_to_history)
                        self.list_combo.append(cb)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire d'environnement et coordinateur technique de projet
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire d'environnement et coordinateur technique de projet

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    J'ai déjà essayé cette solution, c'est encore pire vu que la fonction est appelé pour chaque Combobox de la liste et non pour celle ou l'évent a eu lieu.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Pas possible ça.

    C'est que tu t'y es mal pris.

    Je suis justement occupé sur un code tout à fait similaire et je te garantis que c'est sans problème.

    Par contre si tes diverses combo box partagent des textes identiques tu ne pourras pas identifier celle qui a été activée. Mais ça c'est une autre question.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Gestionnaire d'environnement et coordinateur technique de projet
    Inscrit en
    Mars 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Gestionnaire d'environnement et coordinateur technique de projet

    Informations forums :
    Inscription : Mars 2014
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Ça doit donc être ça le problème, mes combobox possède la même liste de string.

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Je regarde ton code un peu plus en détail, il me semble que tu te complique la vie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                size = len(self.list_combo) - 1                     # --> self.list_combo[-1]
                self.list_combo[size].addItems(STATUT)              # --> self.list_combo[-1].addItems(STATUT)
    Tu peux d'une part utiliser une lambda:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            for i in range(1, len(data)):
                for j in range(Col_POQ):
                    if j == Col_Statut:
                        cb = QtWidgets.QComboBox()
                        self.list_combo.append(cb)
                        cb.addItems(STATUT)
                        cb.setCurrentIndex(cb.findText(data[i][j]))
                        self.tableWidget.setCellWidget(i-1, j, cb)
                        cb.currentIndexChanged.connect(lambda who=cb: self.copy_to_history(who))
     
     
    def copy_to_history(self, sender):
            print(sender.currentText())
    Ou bien tu peux sous-classer si tu n'aimes pas les lambda.

Discussions similaires

  1. Liste d'objets et STL
    Par thibouille dans le forum SL & STL
    Réponses: 2
    Dernier message: 23/10/2005, 17h41
  2. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  3. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11
  4. [Kylix] Composant - Liste d'objet
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 13/12/2002, 22h17
  5. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo