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

Python Discussion :

Pb class sur reception liste déroulante


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Par défaut Pb class sur reception liste déroulante
    Bonjour,

    Une liste déroulante qui me permet de choisir une nation, ça marche, je récupère le nom de ma nation dans la variable q :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    q = lstDeroulNation.get()
    print(Allemagne.capitale)
    print(q)
    print(q.capitale)

    Cela me donne :
    Berlin
    Allemagne
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "C:\Users\jm.aix\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
    File "C:/0_Mes_codes/Civ_Lancement.py", line 27, in foncChoixNation
    print(q.capitale)
    AttributeError: 'str' object has no attribute 'capitale'



    q renvoi bien "Allemagne" (string)
    Allemagne.capitale renvoi bien "Berlin"
    q.capitale renvoi une erreur car q est un string et il le faut en objet
    si je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    q=Allemagne
    print(q.capitale)
    Là ça marche

    Comment fait-on pour que q récupère en tant qu'objet ?

    Code complet :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    # Imports
    from tkinter import *
    import tkinter.ttk as ttk
     
    # ____________________________________________________________________________________________________________________
    # Les variables
    varCoulPrinc = "Slate Gray"
    varCoulPrinc2 = "Gray"
    # ____________________________________________________________________________________________________________________
    # ____________________________________________________________________________________________________________________
    # Création de l'instance Tk
    fen0 =Tk()
    # ____________________________________________________________________________________________________________________
    # Les fonctions
    def foncChoixNation(event):
    # Suite choix déroulante liste des nations : affichage dans le label
    q = lstDeroulNation.get()
    lab00['text'] = "Vous avez choisi la nation : " + q
     
     
    print(Allemagne.capitale)
    print(q)
    q=Allemagne
    print(q.capitale)
     
     
     
     
     
    # ____________________________________________________________________________________________________________________
    # Les classes
    class nation:
    nbNation = 0
    lstNation = []
     
    def __init__(self, nom, couleur, dirigeant, capitale):
    global lstNation
    nation.nbNation += 1
    self.nom = nom
    self.couleur = couleur
    self.dirigeant = dirigeant
    self.capitale = capitale
    # Ajout à la liste des nations pour la liste déroulante
    nation.lstNation.append(nom)
     
     
     
    # ____________________________________________________________________________________________________________________
    # ____________________________________________________________________________________________________________________
    # MAIN : Lancement du programme Principal
    # ____________________________________________________________________________________________________________________
    # Création des nations
    Allemagne = nation("Allemagne", "gris", "Otto Von Bismarck", "Berlin")
    Angleterre = nation("Angleterre", "rouge", "Elisabeth 1ère", "Londres")
    France = nation("France", "bleu", "Napoléon 1er", "Paris")
    nbNation = int(nation.nbNation)
    # _______________________________________
    # TKinter
    # _______________________________________
    # Création fenêtre principale
    fen0.geometry('500x300')
    fen0.title("Civ_Fenêtre principale")
    fen0.configure(bg = varCoulPrinc)
    # _______________________________________
    # listes déroulantes
    lstDeroulNation = ttk.Combobox(fen0, width=16, values=(nation.lstNation))
    lstDeroulNation.bind('<<ComboboxSelected>>', foncChoixNation)
    # Création labels
    lab00 = Label(fen0, text = "",width=50, bg=varCoulPrinc2)
     
     
     
     
    # _______________________________________
    # positionnement objets
    lstDeroulNation.grid(row=0, columns =1) # Liste déroulante Nation
    lab00.grid(row=1, columns =2)
    # Centrage fenêtre
    from Fonctions.FoncCentreEcran import centreFenetre
    centreFenetre(fen0)
    # _______________________________________
    # Réception d'événements
    fen0.mainloop()

  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,

    Tu dois référer la string 'Allemagne' à l'instance Allemagne. Pour cela tu peux, entre autres solutions, utiliser un dictionnaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Allemagne = nation("Allemagne", "gris", "Otto Von Bismarck", "Berlin")
    Angleterre = nation("Angleterre", "rouge", "Elisabeth 1ère", "Londres")
    France = nation("France", "bleu", "Napoléon 1er", "Paris")
    nations = {"Allemagne": Allemagne,
               "Angleterre": Angleterre,
               "France": France}
     
    ...
    q = lstDeroulNation.get()
    print(nations[q].capitale)

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Par défaut
    Merci, mais ça ne marche pas chez moi, j'ai fait comme cela :


    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #   Imports
    from tkinter import *
    import tkinter.ttk as ttk
     
    #   ____________________________________________________________________________________________________________________
    #   Les variables
    varCoulPrinc = "Slate Gray"
    varCoulPrinc2 = "Gray"
    #   ____________________________________________________________________________________________________________________
    #   ____________________________________________________________________________________________________________________
    # Création de l'instance Tk
    fen0 =Tk()
    #   ____________________________________________________________________________________________________________________
    #   Les fonctions
    def foncChoixNation(event):
        #   Suite choix déroulante liste des nations : affichage dans le label
        q = lstDeroulNation.get()
        lab00['text'] = "Vous avez choisi la nation : " + q
     
        print(nation.lstNation)
        print(Allemagne.capitale)
        print(q)
        print (q.capitale)
     
     
     
     
     
     
     
     
    #   ____________________________________________________________________________________________________________________
    #   Les classes
    class nation:
        nbNation = 0
        lstNation = []
     
        def __init__(self, nom, couleur, dirigeant, capitale):
            global lstNation
            nation.nbNation += 1
            self.nom = nom
            self.couleur = couleur
            self.dirigeant = dirigeant
            self.capitale = capitale
            #   Ajout à la liste des nations pour la liste déroulante
            nation.lstNation.append(nom)
     
     
     
    #   ____________________________________________________________________________________________________________________
    #   ____________________________________________________________________________________________________________________
    #  MAIN : Lancement du programme Principal
    #   ____________________________________________________________________________________________________________________
    #   Création des nations
    Allemagne = nation("Allemagne", "gris", "Otto Von Bismarck", "Berlin")
    Angleterre = nation("Angleterre", "rouge", "Elisabeth 1ère", "Londres")
    France = nation("France", "bleu", "Napoléon 1er", "Paris")
    nations = {"Allemagne": Allemagne, "Angleterre": Angleterre, "France": France}
     
     
    nbNation = int(nation.nbNation)
    #   _______________________________________
    #   TKinter
    #   _______________________________________
    #   Création fenêtre principale
    fen0.geometry('500x300')
    fen0.title("Civ_Fenêtre principale")
    fen0.configure(bg = varCoulPrinc)
    #   _______________________________________
    # listes déroulantes
    lstDeroulNation = ttk.Combobox(fen0, width=16, values=(nation.lstNation))
    lstDeroulNation.bind('<<ComboboxSelected>>', foncChoixNation)
    #   Création labels
    lab00 = Label(fen0, text = "",width=50, bg=varCoulPrinc2)
     
     
     
     
    #   _______________________________________
    #   positionnement objets
    lstDeroulNation.grid(row=0, columns =1)                  #   Liste déroulante Nation
    lab00.grid(row=1, columns =2)
    #   Centrage fenêtre
    from Fonctions.FoncCentreEcran import centreFenetre
    centreFenetre(fen0)
    #   _______________________________________
    #   Réception d'événements
    fen0.mainloop()

  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 oui mais tu as laissé ceci: print (q.capitale) et moi je t'ai montré cela: print(nations[q].capitale).

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 141
    Par défaut
    Ah oui !
    Je n'avais pas vu la dernière ligne.
    Merci ça fonctionne bien !

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

Discussions similaires

  1. Question technique sur les listes déroulantes
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 18/04/2007, 10h41
  2. Action sur une liste déroulante
    Par manplum dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/09/2006, 19h28
  3. Controle de saisie sur une liste déroulante
    Par antier dans le forum IHM
    Réponses: 3
    Dernier message: 07/12/2005, 05h42
  4. Réponses: 4
    Dernier message: 16/06/2005, 15h37

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