[Python] Problème d'attribut d'instance
Résolu
Darshu
Messages postés
303
Statut
Membre
-
Darshu Messages postés 303 Statut Membre -
Darshu Messages postés 303 Statut Membre -
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 ?
7 réponses
-
-
Hello.
tu pourrais montrer l'appel à clOptionsNom et l'accès à .numNom de ton code ? -
Merci sebsauvage :)
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: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.
-
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) -
Merciiiiiiiiii ! J'ai galéré pendant un temps pas possible, sans comprendre pourquoi ma variable d'instance n'était pas reconnue ! Merci beaucoup, j'aurais appris un truc important grâce à toi :)