Rechercher : dans
Par :

[Python] Problème d'attribut d'instance

Dernière réponse le 24 aoû 2006 à 14:38:50 Darshu, le 23 aoû 2006 à 10:33:31 
 Signaler ce message aux modérateurs

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

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 ? 

Meilleures réponses pour « [Python] Problème d'attribut d'instance » dans :
[Python] Lire et écrire des fichiers CSV Voir LIRE ET ÉCRIRE DES FICHIERS CSV Python www.python.org, dans sa version 2.4 supporte de facto le format CSV (comma-separated values: valeurs séparées par des virgules). La Library Reference est certes très explicative à ce sujet, mais uniquement...
Votre première application graphique avec Python et Glade Voir Ce guide vous aidera à créer pas à pas votre première application graphique. Nous allons utiliser le langage de programme Python et l'API graphique GTK, en utilisant le logiciel Glade pour créer facilement les interfaces graphiques. C'est de la...
Le langage Python est faiblement typé VoirMythe Le langage de programmation Python est faiblement typé, comme le php ou le Basic. Réalité FAUX. Explications Le Python est un langage à typage fort dynamique. Démonstration: >>> a="toto" >>> b=5 >>> print a+b Traceback (most recent...

1

Darshu, le 24 aoû 2006 à 09:27:13

SVP, personne ne peut m'aider ?

T'as pensé à regarder sur Google avant de poser ta question ­? 

Répondre à Darshu

2

sebsauvage, le 24 aoû 2006 à 11:09:48

Hello.

tu pourrais montrer l'appel à clOptionsNom et l'accès à .numNom de ton code ?

Répondre à sebsauvage

3

Darshu, le 24 aoû 2006 à 13:46:19

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".

T'as pensé à regarder sur Google avant de poser ta question ? 

Répondre à Darshu

4

sebsauvage, le 24 aoû 2006 à 14:00:05

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

Répondre à sebsauvage

5

Darshu, le 24 aoû 2006 à 14:26:07

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.

T'as pensé à regarder sur Google avant de poser ta question ­? 

Répondre à Darshu

6

sebsauvage, le 24 aoû 2006 à 14:32:53

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)

Répondre à sebsauvage

7

 Darshu, le 24 aoû 2006 à 14:38:50

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 :)

T'as pensé à regarder sur Google avant de poser ta question ­? 

Répondre à Darshu