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

Tkinter Python Discussion :

NameError: global name 'entr2' is not defined


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut "AttributeError: core" besoin de vous =)
    Résolu merci!

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Effectivement, dans ta fonction config(), les variables créées sont des variables locales qui sont détruites à la fin de cette fonction... ce qui n'est probablement pas ce que tu voulais.

    Une des possibilités: abandonne le fichier config() et met son contenu en exécution au niveau global.

    Tyrtamos

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 85
    Par défaut
    malhereusement se n'est pas possible (enfin je croix ) sa doit rester dedans pour que tout fonctionne

    programme 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
    #-*- coding:Utf-8 -*-
    from Tkinter import *
    import os
    fichier_config= open('config.ini', 'r')
    contenu = fichier_config.readlines()
    fichier_config.close ()
     
    try:
    	hostloc = str(contenu[1][0:len(contenu[1])-1]) # emplacement host
    	gameloc = str(contenu[2][0:len(contenu[2])-1]) #emplacement game
    	ipadress = str(contenu[3][0:len(contenu[3])-1]) #adresse ip
    	core = str(contenu[4][0:len(contenu[4])-1])#no version	
     
    except:
    	print "ERREUR! veuillez verifiez le fichier config.ini"
    def patcher(choix) :
            if choix ==1 :
                    host= open(hostloc, "a")
                    host.close()
                    host= open(hostloc, "w")
                    host.write('127.0.0.1 localhost\n')
                    host.write(ipadress +' l2authd.lineage2.com\n')
                    host.write(ipadress +' L2testauthd.lineage2.com\n')
                    host.write('216.107.250.194 nprotect.lineage2.com\n')
            elif choix ==2 :                
                    os.startfile(gameloc)
     
    def config() :
        fenetre2 = Tk()
        fenetre2.title('Modifiez...  ' + core)
        txt1 = Label(fenetre2, text = 'Jeu :').grid(row=0, sticky =E)
        txt2 = Label(fenetre2, text = 'Ip  :').grid(row=1, sticky =E)
        entr1 = Entry(fenetre2).grid(row =0, column =1)
        entr2 = Entry(fenetre2).grid(row= 1, column =1)
        bouton4 =Button(fenetre2, text= '  Ok  ', command =configadd).grid(row=2, column=1, sticky =E)
        fenetre2.mainloop()
        fenetre2.destroy()
    def configadd() :
    	global entr2
    	ipadress = str(entr2.get())
    	host= open(hostloc, "a")
            host.close()
            host= open(hostloc, "w")
            host.write('127.0.0.1 localhost\n')
            host.write(ipadress +' l2authd.lineage2.com\n')
    	host.write(ipadress +' L2testauthd.lineage2.com\n')
    	host.write('216.107.250.194 nprotect.lineage2.com\n')
     
    # affichage Tk
    fenetre = Tk()
    # image
    can1 = Canvas(fenetre, width =500, height =250, bg ='gray')
    photo = PhotoImage(file ='header.gif')
    item = can1.create_image(250, 125, image =photo)
    #image
    fenetre.title('l2-Luncher by Noquioz  ' + core)
    can1.pack()
    bouton1 = Button(fenetre, text='Patch', command = (lambda: patcher(1))).pack(side =BOTTOM)
    bouton2 = Button(fenetre, text='Play', command = (lambda: patcher(2))).pack(side =BOTTOM)
    bouton3 = Button(fenetre, text='Option', command =config).pack(side =BOTTOM)
    chaine = Label(fenetre)
    chaine.pack()
    fenetre.mainloop()
    fenetre.destroy()

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Par défaut utiliser class
    Pour éviter ces problèmes, il faut encapsuler ton programme dans une classe (j'ai longtemps galéré avant de le faire et plus après !!)
    exemple :
    class Application:
    def __init__(self):
    #ici les variables initiales de ton script

    self.entr2=3
    #puis tes fonctions (attention à ajouter self
    def config(self) :
    fenetre2 = Tk()
    fenetre2.title('Modifiez... ' + core)
    f

    def configadd(self) :
    def configadd(self) :
    self.ipadress = str(self.entr2.get())
    #puis tu instance la classe :

    import os
    import shutil

    f = Application() # instanciation de l'objet application

    maintenant si tu déclare une variable avec self. devant elle est valable dans toutes les fonction de la classe. Sans le self, elle n'est valable que dans la fonction ou elle est utilisée. Avec ça, plus de problème de poertée de variables !

  5. #5
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Tout à fait, mais pour ce cas précis, si ne veut pas encapsuler ton prog dans une classe (ce qui serait vraiment dommage), au début ta procédure 'config', met ici aussi global entr2. Par contre comme je ne me sert jamais des globales, je ne sais plus si il faut que tu retires du coup global entr2 de ton autre procédure ou pas...essayes, tu verras bien

Discussions similaires

  1. NameError: global name 'thread' is not defined
    Par Balbuzard dans le forum Général Python
    Réponses: 6
    Dernier message: 15/07/2009, 06h52
  2. Réponses: 4
    Dernier message: 19/06/2009, 15h23
  3. références croisées objets NameError: global name is not defined
    Par loicmidy dans le forum Général Python
    Réponses: 2
    Dernier message: 13/06/2009, 15h41
  4. NameError: name 'nbBug' is not defined
    Par titi_lion dans le forum Général Python
    Réponses: 1
    Dernier message: 15/05/2009, 12h32
  5. NameError: name 'excel' is not defined
    Par billyrose dans le forum Général Python
    Réponses: 3
    Dernier message: 14/07/2008, 17h37

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