Pb Class

Résolu
Ragus99 Messages postés 17 Statut Membre -  
Ragus99 Messages postés 17 Statut Membre -
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 :

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 :
    q=Allemagne
print(q.capitale)

Là ça marche

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

Code complet :

#   Imports
from tkinter import *
import tkinter.ttk as ttk
""" ******************************
DOCSTRING
Menu de lancement
                                                            • """# _____________________________________________________________________________________________________# Les variablesvarCoulPrinc = "Slate Gray"varCoulPrinc2 = "Gray"# _____________________________________________________________________________________________________# _____________________________________________________________________________________________________# Création de l'instance Tkfen0 =Tk()# _____________________________________________________________________________________________________# Les fonctionsdef 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 classesclass 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 nationsAllemagne = 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 principalefen0.geometry('500x300')fen0.title("Civ_Fenêtre principale")fen0.configure(bg = varCoulPrinc)# _______________________________________# listes déroulanteslstDeroulNation = ttk.Combobox(fen0, width=16, values=(nation.lstNation))lstDeroulNation.bind('<<ComboboxSelected>>', foncChoixNation)# Création labelslab00 = Label(fen0, text = "",width=50, bg=varCoulPrinc2)# _______________________________________# positionnement objetslstDeroulNation.grid(row=0, columns =1) # Liste déroulante Nationlab00.grid(row=1, columns =2)# Centrage fenêtrefrom Fonctions.FoncCentreEcran import centreFenetrecentreFenetre(fen0)# _______________________________________# Réception d'événementsfen0.mainloop()


Merci d'avance

3 réponses

  1. Ragus99 Messages postés 17 Statut Membre
     
    Je viens de voir que le copier/coller du code n'est pas du tout lisible, le revoici :
    #   Imports
    from tkinter import *
    import tkinter.ttk as ttk
    """ ******************************
    DOCSTRING
    Menu de lancement
                                                              • """# ____________________________________________________________________________________________________________________# Les variablesvarCoulPrinc = "Slate Gray"varCoulPrinc2 = "Gray"# ____________________________________________________________________________________________________________________# ____________________________________________________________________________________________________________________# Création de l'instance Tkfen0 =Tk()# ____________________________________________________________________________________________________________________# Les fonctionsdef 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 classesclass 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 nationsAllemagne = 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 principalefen0.geometry('500x300')fen0.title("Civ_Fenêtre principale")fen0.configure(bg = varCoulPrinc)# _______________________________________# listes déroulanteslstDeroulNation = ttk.Combobox(fen0, width=16, values=(nation.lstNation))lstDeroulNation.bind('<<ComboboxSelected>>', foncChoixNation)# Création labelslab00 = Label(fen0, text = "",width=50, bg=varCoulPrinc2)# _______________________________________# positionnement objetslstDeroulNation.grid(row=0, columns =1) # Liste déroulante Nationlab00.grid(row=1, columns =2)# Centrage fenêtrefrom Fonctions.FoncCentreEcran import centreFenetrecentreFenetre(fen0)# _______________________________________# Réception d'événementsfen0.mainloop()
    0
  2. Ragus99 Messages postés 17 Statut Membre
     
    et mer**, je recommence :

    #   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()
    0
  3. Ragus99 Messages postés 17 Statut Membre
     
    POur ceux que ça interesse, il faut créer une bibiothèque :
    #   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}


    et l'appeler de cette façon :
    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(nations[q].capitale)
    0