[Python] Problème d'attribut d'instance
Résolu
Darshu
Messages postés
303
Date d'inscription
Statut
Membre
Dernière intervention
-
Darshu Messages postés 303 Date d'inscription Statut Membre Dernière intervention -
Darshu Messages postés 303 Date d'inscription Statut Membre Dernière intervention -
Bonjour, je suis en train de faire une petite application, et je veux que l'on saisisse des paramètres via une boîte de dialogue. Il y a 2 joueurs, chacun ayant son nom stocké en variable d'instance sur la classe que j'ai construite.
Le problème c'est que quand j'essaie d'afficher la boîte de dialogue, Python me dis : " line 260, in body
if self.numNom == 1:
AttributeError: clOptionsNom instance has no attribute 'numNom' ". Cette ligne correspond au set.nom() selon les cas ... "num" vaut 1 ou 2, et renvoie au numéro du joueur. Enfin bref, je coince la ! Voila mon code
T'as pensé à regarder sur Google avant de poser ta question ?
Le problème c'est que quand j'essaie d'afficher la boîte de dialogue, Python me dis : " line 260, in body
if self.numNom == 1:
AttributeError: clOptionsNom instance has no attribute 'numNom' ". Cette ligne correspond au set.nom() selon les cas ... "num" vaut 1 ou 2, et renvoie au numéro du joueur. Enfin bref, je coince la ! Voila mon code
class clOptionsNom(Dialog) : def __init__(self,boss,num) : Dialog.__init__(self,boss) self.boss = boss self.numNom = num def body(self,master) : self.title("Changer nom du joueur") Label(master,text="Entrez le nom :").grid(row=0,column=0,sticky="w") self.nom = StringVar() Entry(master,width=15,textvariable=self.nom).grid(row=0, column=1, sticky="w") if self.numNom == 1: self.nom.set('Joueur 1') else: self.nom.set('Joueur 2')--
T'as pensé à regarder sur Google avant de poser ta question ?
A voir également:
- [Python] Problème d'attribut d'instance
- Citizen code python avis - Accueil - Outils
- Attribut changer - Télécharger - Divers Utilitaires
- Mot secret python pix ✓ - Forum Python
- \R python ✓ - Forum Python
- Afficher un message sur python "" ✓ - Forum Python
7 réponses
Merci sebsauvage :)
Donc j'ai un menu qui va appeller une fonction. Voila un bout du code pour le menu :
Donc j'ai un menu qui va appeller une fonction. Voila un bout du code pour le menu :
class MenuBar(Frame): "Barre de menus déroulants" def __init__(self,boss=None): Frame.__init__(self,borderwidth=2) ### Menu <Joueur1> ### self.joueur1 = Menubutton(self,text='Joueur 1') self.joueur1.pack(side=LEFT) me1 = Menu(self.joueur1) me1.add_command(label='Changer Nom',underline=8,command=boss.changeNom1) me1.add_command(label='Changer Couleur',underline=8,command=boss.changeCouleur1) self.joueur1.configure(menu=me1)Et la fonction appellée est ici :
class Application(Frame): # init de Frame + paramètrage def changeNom1(self): clOptionsNom(self,1)Pour le moment il y a une fonction par joueur, mais je vais changer ça avec des expressions lambdas. Sauf que chaque chose en son temps, d'abord faire marcher correctement le truc de façon "simple".
Tu l'importe de où ton "Dialog" ?
Parcque malgré un "from Tkinter import *", il me dit:
Parcque malgré un "from Tkinter import *", il me dit:
Traceback (most recent call last): File "a.py", line 3, in ? class clOptionsNom(Dialog) : NameError: name 'Dialog' is not defined
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ah oui pardon, rajoute ça from tkSimpleDialog import *
C'est un module de tk comme son nom l'indique qui fournit déja des petits widgets simples de validation/choix.
C'est un module de tk comme son nom l'indique qui fournit déja des petits widgets simples de validation/choix.
Ah !
ça y est, j'ai compris.
Dans ta class, tu redéfinis la méthode body() de tkSimpleDialog
Or cette méthode body() est appellée lorsque tu appelle le constructeur Dialog.__init__(self,boss)
A ce moment là, self.numNom n'existe pas encore.
Il suffit donc de mettre ton self.numNom = num juste avant l'appel à Dialog.__init__(self,boss)
ça y est, j'ai compris.
Dans ta class, tu redéfinis la méthode body() de tkSimpleDialog
Or cette méthode body() est appellée lorsque tu appelle le constructeur Dialog.__init__(self,boss)
A ce moment là, self.numNom n'existe pas encore.
Il suffit donc de mettre ton self.numNom = num juste avant l'appel à Dialog.__init__(self,boss)