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 :

Valeurs dans une combobox à partir d'un fichier CSV


Sujet :

PyQt Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Points : 39
    Points
    39
    Par défaut Valeurs dans une combobox à partir d'un fichier CSV
    Bonjour,

    Dans mon interface j'ai 2 combobox (liste déroulante) qui récupère des données à partir d'un fichier CSV.
    La 1e combobox récupère la marque des voitures et à partir du choix fait par l'utilisateur, la 2e combobox récupère les modèles de voiture correspondant à la marque.

    Mon souci est que pour certaines marques, il n'affiche pas les modèles.

    Voici mon code :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
        def choixMarque(self):
            liste1=[] # liste contenant les marques de dumper
            liste2=[] # liste intermédiaire
     
            # Ouvrir le fichier csv contenant les infos sur les dumpers
            with open(r"D:/Moi/Projet/Voitures.csv", newline='') as f:
                reader = csv.reader(f, delimiter = ';')
                for row in reader:
                    liste1.append(row[0]) # récupérer les marques dans une liste
     
                for d in liste1:
                    if not d in liste2: 
                        liste2.append(d)
                        print(type(d))
                        ui.marque.addItem(d) # rajouter la marque dans la combobox
     
     
                ui.marque.currentIndexChanged.connect(p.modele) # remplir la liste des modèles en fonction de la marque
     
     
        def modele(self):
     
            ui.modele.clear() # vider la combobox pour éviter les doublons
     
            indexMarque = ui.dumperMarque.currentIndex()
            nomMarque = ui.marque.currentData(indexMarque) # récup le nom de la marque choisie
     
            with open(r"D:/Moi/Projet/Voitures.csv", newline='') as f:
                reader = csv.reader(f, delimiter = ';')
                for row in reader:
                    if row[0] == nomMarque:
                         ui.modele.addItem(row[1]) # mettre modele dans combobox
    Pour certains noms de marques, il me dit que c'est un 'None Type' alors que pour celles qui marchent c'est du str
    Je pense que le problème vient de là mais lorsque je récupère les noms de marque dans la 1e fonction elles sont toutes au format str, ce n'est que dans la 2e fonction où ça change..

  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,

    Il y a deux choses étranges dans ton code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                 ui.marque.currentIndexChanged.connect(p.modele)
    Ce devrait être self.modele plutôt

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            nomMarque = ui.marque.currentData(indexMarque)
    Qui devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            nomMarque = str(ui.marque.currentText())
    ou, avec Python2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            nomMarque = unicode(ui.marque.currentText())

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Points : 39
    Points
    39
    Par défaut
    Merci ça marche !!

    Par contre, je ne comprends pas pourquoi currentData ne fonctionne pas (ou plutôt pourquoi il fonctionne une fois sur deux ?)

    Par rapport, au p.modele, p correspond à la classe (p=Projet() ) mais j'ai suivi ton conseil et mis self à la place

  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
    Ben, si ui.marque est la comboBox qu'est-ce que ui.dumperMarque et à quelle doc te réfère-tu pour currentData ?

    Et je n'ai pas la moindre idée du pourquoi cela fonctionne une fois sur deux.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 77
    Points : 39
    Points
    39
    Par défaut
    C'est la même combobox, je me suis trompé en recopiant :s
    Je regarde la doc officielle.
    Ca marche avec currentText en tout cas

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/12/2009, 13h33
  2. remplir une combobox à partir d'un fichier .csv
    Par wolverine1987 dans le forum MFC
    Réponses: 24
    Dernier message: 28/04/2009, 11h00
  3. Réponses: 12
    Dernier message: 30/05/2006, 15h57
  4. [VB.net] Affichage valeur dans une ComboBox
    Par nico10gbb dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/04/2006, 15h32
  5. ajouter une valeur dans une combobox
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 17/10/2005, 10h58

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