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 :

Lien entre deux QComboBox [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut Lien entre deux QComboBox
    Bonjour,

    J'ai beau chercher dans le net mais je n'ai pas trouvé de solution claire pour mon problème qui se résume ainsi:
    J'ai deux tables QSQLITE l'une Domaine qui a deux champs DomId et DomLib et l'autre table Activite qui a trois champs DomId, ActivId et ActivLib.

    DomId DomLib
    1 Gestion
    2 Technique

    DomId ActivId ActivLib
    1 1 Administration
    1 2 Audit
    2 1 Automatisme
    2 2 Mecanique

    J'essaye depuis plusieurs jours de faire un lien entre les deux tables en utilisant deux QComboBox qui par le choix d'un domaine il m'affiche dans l'autre QComboBox les activités liées à ce domaine.

    Voici mon code pour l'affichage des deux tables en utilisant QSqlRelationalTableModel :

    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
    16
    17
    #Affichage des Domaines dans un comboBox comboBoxDomaineAdm
     
            self.listedomaineAdmmodel = QSqlRelationalTableModel(self)
            self.listedomaineAdmmodel.setTable('Domaine')
            self.listedomaineAdmmodel.select()
            self.ui.comboBoxDomaineAdm.setModel(self.listedomaineAdmmodel)
            self.ui.comboBoxDomaineAdm.setModelColumn(self.listedomaineAdmmodel.fieldIndex('DomaineLibelle'))
            self.ui.comboBoxDomaineAdm.currentIndexChanged.connect(self.ui.comboBoxActiviteAdm.setCurrentIndex)
     
    #Affichage des Activités dans un comboBox comboBoxActiviteAdm
     
            self.listeActiviteAdmmodel = QSqlRelationalTableModel(self)
            self.listeActiviteAdmmodel.setTable('Activites')
            self.listeActiviteAdmmodel.select()
            self.ui.comboBoxActiviteAdm.setModel(self.listeActiviteAdmmodel)
            self.ui.comboBoxActiviteAdm.setModelColumn(self.listeActiviteAdmmodel.fieldIndex('ActiviteLibelle'))
            self.ui.comboBoxActiviteAdm.currentIndexChanged.connect(self.ui.comboBoxThemes.setCurrentIndex)
    En cliquant sur le premier QComboBox la liste du deuxième QComboBox se change mais dans un ordre qui me semble quelconque.

    Ma question est : Comment puis je lier mes deux QComboBox par l'identifiant du domaine (DomId) et non pas par l'index du QComboBox.
    Merci pour votre réponse.

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Lorsque tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            self.ui.comboBoxDomaineAdm.currentIndexChanged.connect(self.ui.comboBoxActiviteAdm.setCurrentIndex)
    tu changes l'index courant de la deuxième QComboBox avec le nouvel index de la première.
    Elles deviennent synchrones en quelque sorte. Et on suppose que ce n'est pas ce que tu veux.

    Tu dois passer par une fonction intermédiaire qui évaluera l'item sélectionné dans la première combo pour choisir celui qui sera approprié dans la seconde combo.

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Merci VinsS pour votre réponse mais vous m'obliger à m'accrocher à vous et vous demandez comment, j'ai à peine quelques mois d'apprentissage avec PyQt5.
    Néanmoins, permettez mois d'ouvrir une petite parenthèse, et je voudrais posé une question qui paressait bête, avec un combobox on affiche une liste d'article qu'on appelle Item, mais sa valeur cacher Id comment l’appellent-on

  4. #4
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Ben, tu peux connaître l'index courant avec self.ui.comboBoxActiviteAdm.currentIndex() et le texte avec self.ui.comboBoxActiviteAdm.currentText()Tout est ici: https://doc.qt.io/qt-5/qcombobox.html

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Septembre 2015
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 148
    Par défaut
    Bonjour VinsS,

    la commande : self.ui.comboBoxActiviteAdm.currentText() me permet de connaitre le texte affiché dans le QComboBox mais ce je voulais c'est connaitre son identifiant (le premier champ de la table "Domaine" comme afficher dans mon premier message) et l'utilisé dans la liaison avec le deuxième QComboBox.
    Cordialement.

  6. #6
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    En cliquant sur le premier Qcombobox la liste du deuxième Qcombobox se change mais dans un ordre qui me semble quelconque
    Il faut que tu passes par le model :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        self.ui.comboBoxDomaineAdm.currentIndexChanged.connect(self.setFilter)
    def setFilter(self,row):
    	print(self.listedomaineAdmmodel.data(self.listedomaineAdmmodel.index(ind, 0, QModelIndex())))

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Lien entre deux tables
    Par ept35 dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 14/12/2005, 19h42
  2. [MySQL] Lien entre deux tables
    Par ept35 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/11/2005, 13h56
  3. lien entre deux sous formulaire :(
    Par souska dans le forum Access
    Réponses: 4
    Dernier message: 20/09/2005, 21h37
  4. Type de lien entre deux associations
    Par thibal dans le forum PowerAMC
    Réponses: 2
    Dernier message: 17/06/2005, 16h53
  5. [VB.NET] ComboBox lien entre deux tables
    Par VDB1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/07/2004, 12h15

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