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 :

Afficher valeur d'un champ dans un QCombobox


Sujet :

PyQt Python

  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 Afficher valeur d'un champ dans un QCombobox
    Bonjour,

    Je voudrais soulever un petit problème qui me tracasse depuis longtemps.
    En résumé, j'utilise dans la saisie des données des combobox. Jusqu’à la tout marche à merveille en affichant le combobox comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
           # Attribut catégorie client
            self.model_categorie = QSqlTableModel(self)
            self.model_categorie.setTable('attribut_categorie')
            self.model_categorie.select()
            self.ui.cb_categorie.setModel(self.model_categorie)
            self.ui.cb_categorie.setModelColumn(self.model_categorie.fieldIndex('categorie_libelle'))
            self.ui.cb_categorie.setCurrentIndex(-1)
            self.ui.cb_categorie.currentIndexChanged.connect(self.setfilter_categorie_fsm)
    Et pour insérer la valeur cachée de l'attribut_categorie dans la table au lieu du libellé j’utilise la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        def setfilter_categorie(self, row):
            self.categorie = self.model_categorie.data(self.model_categorie.index(row, 0, QModelIndex()))
    Mon problème est : lorsque je voudrais modifier l'attribut_categorie je voudrais que la valeur déjà saisie dans la table s'affiche dans le combobox

    Nom : categ.png
Affichages : 191
Taille : 3,1 Ko

    Merci.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par noureddine1967 Voir le message
    Mon problème est : lorsque je voudrais modifier l'attribut_categorie je voudrais que la valeur déjà saisie dans la table s'affiche dans le combobox
    Donc il faut que la combobox soit modifiée quand la table est modifiée.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  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
    Bonjour,

    Merci pour votre réponse, mais je pense que je me suis mal exprimé,
    la valeur que je voudrais afficher dans le combobox n'est pas de la table attribut_categorie mais celle insérée dans la table clients.

    La modification c'est sur la valeur choisie dans le combobox qui a été insérée dans la table clients.
    Merci.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    la valeur que je voudrais afficher dans le combobox n'est pas de la table attribut_categorie mais celle insérée dans la table clients.
    La modification c'est sur la valeur choisie dans le combobox qui a été insérée dans la table clients.
    Ok. Donc c'est dans l'autre sens que ça marche. Quand ton widget contenant le combo s'affiche (showEvent), il commence par lire le contenu de la table clients et crée le ComboBox en conséquence (en présumant donc que la saisie de la table "clients" s'est faite depuis un autre widget)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  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,
    il commence par lire le contenu de la table clients et crée le ComboBox en conséquence (en présumant donc que la saisie de la table "clients" s'est faite depuis un autre widget)...
    Dans ce cas, j'aurai uniquement la valeur dans la table clients qui s'affiche et je n'aurai pas la possibilité de la modifier par une autre valeur qui se trouve au préalable
    dans le combobox attribut_categorie

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    Citation Envoyé par noureddine1967 Voir le message
    la valeur que je voudrais afficher dans le combobox n'est pas de la table attribut_categorie mais celle insérée dans la table clients.
    Dans ce cas, j'aurai uniquement la valeur dans la table clients qui s'affiche et je n'aurai pas la possibilité de la modifier par une autre valeur qui se trouve au préalable dans le combobox attribut_categorie
    Alors un coup tu veux afficher les données de la table "client", mais l'instant d'après tu veux aussi celles de la table "attribut_categorie"...

    Quand la fenêtre s'ouvre (showEvent), tu charges les infos venant de la table "client" ET AUSSI celles de la table "attribut_categorie". Ces infos n'étant pas modifiées par la fenêtre en question, le combo n'a alors ensuite pas besoin de bouger.
    Toutefois ça me semble bizarre que des infos de même nature soient prises dans deux tables différentes. Ca traduit là un souci de conception de la bdd qui n'est alors pas en 3FN. Normal alors d'avoir ensuite un souci de gestion de l'IHM chargée de la remplir.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    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 Sve@r,

    S'il vous plait ne vous fâchez pas

    si tu veux que ta table "attribut_categorie" alimente le combo quand elle est modifiée (étrange pour un combo censé donner un choix de valeurs pour justement alimenter cette table mais pourquoi pas)
    Le combobox "categorie" contient des valeurs qui ne change pas, mon souci et d'afficher la "catégorie" du client dans le combobox "catégorie" et par la même occasion avoir la possibilité de modifier la valeur de la catégorie du client.
    Merci

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    Citation Envoyé par noureddine1967 Voir le message
    Mon problème est : lorsque je voudrais modifier l'attribut_categorie je voudrais que la valeur déjà saisie dans la table s'affiche dans le combobox
    Le combobox "categorie" contient des valeurs qui ne change pas
    Hum...

    Citation Envoyé par noureddine1967 Voir le message
    mon souci et d'afficher la "catégorie" du client dans le combobox "catégorie" et par la même occasion avoir la possibilité de modifier la valeur de la catégorie du client.
    Ok. Donc ce widget est prévu pour modifier la table "client". Donc même réponse que ici, il faut que la combobox soit modifiée quand la table "client" est modifiée.

    Voici les étapes
    1. le widget s'ouvre, il appelle une méthode "load()" qui lit la table "client" et qui positionne le combobox sur la catégorie du client.Si par exemple le client est "secteur économique" alors le combo se postionne sur "secteur économique".
    2. tu changes le combo de catégorie, ça modifie la catégorie dans la table client (ça peut être dangereux, peut-être faudrait prévoir un bouton style "valider la modif"). Mais dans ce cas, rien de plus à faire. Le combo est passé sur "secteur agricole", le client est aussi sur "secteur agricole"
    3. si tu fermes ton widget et que tu le ré-ouvres, le client étant sur "secteur agricole" le combo est alors positionné sur "secteur agricole" via le "load()"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    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
    tu changes le combo de catégorie, ça modifie la catégorie dans la table client (ça peut être dangereux, peut-être faudrait prévoir un bouton style "valider la modif"). Mais dans ce cas, rien de plus à faire. Le combo est passé sur "secteur agricole", le client est aussi sur "secteur agricole"
    Comment faire, dans la table client la catégorie du client est unique ou bien "secteur économique" ou "secteur agricole"

    Et comment switcher entre les valeurs fixes du combobox et ceux de la table "clients"

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    Comment faire, dans la table client la catégorie du client est unique ou bien "secteur économique" ou "secteur agricole"
    Encore heureux !!!
    En fait, pour bien faire, il faudrait créer une table "catégorie" contenant un identifiant unique (1, 2, 3) et un libellé libre ("secteur économique", "secteur agricole", "secteur privé"). Et dans la table client une clef étrangère "id_categorie" contenant 1, 2 ou 3. C'est ce qu'on appelle une jointure.
    Ca gagne de la place, ça permet de modifier le libellé sans modifier tous les clients correspondants

    Citation Envoyé par noureddine1967 Voir le message
    Et comment switcher entre les valeurs fixes du combobox et ceux de la table "clients"
    Relier le combobox à un slot qui modifie la table client en fonction du combo choisi. Ca se fait via currentIndexChanged.
    Et si un autre truc a besoin de connaitre le combo en cours, il peut demander le currentIndex() du comboBox.

    Le reste ça repart sur mon "1", "2" et "3" de mon post précédent. Quand le widget s'ouvre (ou se ré-ouvre) il lit la catégorie du client en cours et positionne le combo sur cette catégorie. Et quand le combo change ça modifie le client. Et etc.

    PS: tu peux positionner une valeur dans un item de combo. Ca se fait via addItem("chaine à afficher", QVariant(valeur à stocker)). En récupérant l'index du combo tu as son item et de là tu peux récupérer sa valeur.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    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 pour votre patience,

    En fait, pour bien faire, il faudrait créer une table "catégorie" contenant un identifiant unique (1, 2, 3) et un libellé libre ("secteur économique", "secteur agricole", "secteur privé"). Et dans la table client une clef étrangère "id_categorie" contenant 1, 2 ou 3. C'est ce qu'on appelle une jointure.
    Ca gagne de la place, ça permet de modifier le libellé sans modifier tous les clients correspondants
    J'ai déjà créer la table catégorie comme vous l'avez dit, avec Id_categorie et Lib_categorie seulement, j'ai pas penser à la clé étrangère.
    Je vais essayer

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    J'ai déjà créer la table catégorie comme vous l'avez dit, avec Id_categorie et Lib_categorie seulement, j'ai pas penser à la clé étrangère.
    Sans clef étrangère, comment alors fais-tu pour stocker, dans la table client, que clientX est de catégorieX et que clientY est de catégorieY? Recopierais-tu le libellé de sa catégorie dans un champ "libellé" de la table client ? Parce que là, c'est la seule hypothèse qui me vient...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    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,

    J’utilise le code suivant, pour stocker la valeur cachée de la table "catégorie" qui est '1', '2' ou '3' dans la table clients.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        def setfilter_categorie(self, row):
            self.categorie = self.model_categorie.data(self.model_categorie.index(row, 0, QModelIndex()))

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    J’utilise le code suivant, pour stocker la valeur cachée de la table "catégorie" qui est '1', '2' ou '3' dans la table clients.
    Oui ça c'est dans Qt, donc en mémoire. Mais comment fais-tu, quand ton application est terminée (fermée) pour stocker ces infos en bdd puisque ta table "client" n'a pas de clé étrangère vers la table "categorie"?
    Accessoirement (opération inverse), quand Qt charge les infos de la bdd (car pour pouvoir les stocker il faut bien d'abord qu'il les charge), comment sait-il que clientX sera de catégorie 1 et clientY de catégorie 2 ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    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

    Oui ça c'est dans Qt, donc en mémoire. Mais comment fais-tu, quand ton application est terminée (fermée) pour stocker ces infos en bdd puisque ta table "client" n'a pas de clé étrangère vers la table "categorie"?
    Pour le moment ça marche et les informations sont bien stockées dans la table "clients"

    Accessoirement (opération inverse), quand Qt charge les infos de la bdd (car pour pouvoir les stocker il faut bien d'abord qu'il les charge), comment sait-il que clientX sera de catégorie 1 et clientY de catégorie 2 ???
    C'est ça mon problème, comment afficher dans le combobox 'categorie' la valeur stockée dans la table 'clients' et avoir la possibilité de choisir une autre valeur de la catégorie et modifier par la même occasion la catégorie dans la table 'clients'.

  16. #16
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par noureddine1967 Voir le message
    Pour le moment ça marche et les informations sont bien stockées dans la table "clients"
    Comment est conçu cette table, c'est là ma question. Dans quelle colonne de cette table est stockée l'information "ce client est de cette catégorie" ?????

    Citation Envoyé par noureddine1967 Voir le message
    C'est ça mon problème, comment afficher dans le combobox 'categorie' la valeur stockée dans la table 'clients' et avoir la possibilité de choisir une autre valeur de la catégorie et modifier par la même occasion la catégorie dans la table 'clients'.
    Q1: Pour afficher dans le combobox "categorie" la valeur stockée, il faut que l'item contenant la bonne catégorie soit automatiquement sélectionné à un moment où à un autre quand la fenêtre s'ouvre (en supposant que quand elle s'ouvre, elle s'ouvre sur un client précis). Cela se fait via setCurrentIndex() Ton combobox possède 5 items (categorie1, categorie2, categorie3, categorie4, categorie5), le client est "categorie3" tu sélectionnes alors l'index 3.

    Q2: pour avoir possibilité de choisir une autre valeur, c'est par défaut sur une combobox => tu as automatiquement possibilité de la changer

    Q3: pour que la table client soit modifiée "par la même occasion", il faut relier le combobox à un slot qui modifie la table client quand le combobox change. Ca se fait via le signal currentIndexChanged(). Déjà dit ici.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [MySQL] Comment afficher la valeur d'un champ dans 2 champs ?
    Par geeka dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/08/2015, 14h56
  2. Réponses: 4
    Dernier message: 02/07/2015, 11h36
  3. Réponses: 7
    Dernier message: 25/01/2009, 22h50
  4. Changement valeur d'un champ dans une requête
    Par Mimile28 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/04/2005, 14h28
  5. récupérer la valeur du 2ème champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/07/2004, 16h45

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