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 :

Entry récupération de variable


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Par défaut Entry récupération de variable
    voila, j'ai un problème vraiment trés bête que je sais normalement résoudre depuis mon premier mois de programmation (1 an maintenant)

    j'ai un peu honte

    voila, je suis en train de faire un code qui permet de trouver le Hash md5 d'un mot et le mot correspondant a un hash md5 (juste pour la pratique).

    mais, la il me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Traceback (most recent call last):
      File "C:\Program Files\python 2.5.4\Lib\lib-tk\Tkinter.py", line 1414, in __call__
        return self.func(*args)
      File "C:\Users\valerie\Desktop\md5_md6.py", line 36, in Test
        entree = entree.get()
    UnboundLocalError: local variable 'entree' referenced before assignment
    voila le code
    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
    #-*- coding:utf-8 -*-
     
    import md5
    from sys import *
    from Tkinter import *
    lignes=[]
    dicoMots_md5 = {}
     
    def Interface():
        fen = Tk()
        entree = Entry(fen)
        entree.grid(row=0, column = 1)
        text=Label(fen, text="Mot")
        text.grid(row = 0, column=0)
        entree2 = Entry(fen)
        entree2.grid(row=0, column = 2)
        text2=Label(fen, text="Hash")
        text2.grid(row=0, column=3)
        Button(fen, text="Commencer", command = Test).grid(row = 1,column=1)
        fen.mainloop()
     
    def commencer():
        file = open("Mots_md5.txt","r")
        ligne = file.readlines()
        ligne="".join(ligne)
        ligne=ligne.split(" ")
        for mot in ligne:
            m=md5.new(mot)
            m= m.hexdigest()
            dicoMots_md5[mot]=m
     
        Interface()
     
    def Test():
        entree = entree.get()
        entree2 = entree2.get()
        if entree == None:
            Dhash()
        else:
            Hash()
     
    def Hash():
        entree = str(entree)
        m = md5.new(entree)
        m = m.hexdigest()
        print m
     
    def Dhash():
        for i in dicoMots_md5:
            m = md5.new(i)
            m = hexdigest()
            if m == dicoMots_md5.has_key(i):
                print i, m
                break
     
    commencer()
    merci de m'aider a résoudre se problèmme. je suis en train de buté dessus depuis 1 heure. je suis sur que c'est en fait trés bête

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Ton problème est très simple:
    dans ta fonction Test, tu fais
    Or, la variable entree n'existe pas.

  3. #3
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Par défaut
    ben si, la variable entree existe. regarde dans ma fonction interface() -_-

    j'ai essayé d'ajouté global entree, entree2.
    faire m'on interface simplifié directement sans passé par une def

    mais rien n'y fait. il ne trouve pas ma variable entree qui existe belle et bien pourtant

  4. #4
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    les variables qui sont créées à l'intérieur d'une fonction sont visibles
    qu'à l'intérieur de cette fonction. De plus, elles sont détruites lorsque la fonction se termine. Par contre, les variables qui sont créées dans un espace de nom supérieur sont accessibles.

    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
     
    >>> a = [4,4]
    >>> def foo() :
    ...     b = [1,2]
    ...     print( globals() ) #Affiche les variables de l'espace de nom globals
    ...     print( locals() )#Affiche les variables de l'espace de nomo lcales.
    ...
    >>>
    >>> foo()
    {'a': [4, 4], '__builtins__': <module 'builtins' (built-in)>, '__package__': None, '__name__': '__main__', 'foo': <funct
    ion foo at 0x00BBCF60>, '__doc__': None}
    {'b': [1, 2]}
    >>>
    >>> # De retour dans l'espace globals
    >>>
    >>> locals()
    {'a': [4, 4], '__builtins__': <module 'builtins' (built-in)>, '__package__': None, '__name__': '__main__', 'foo': <funct
    ion foo at 0x00BBCFA8>, '__doc__': None}
    >>> globals()
    {'a': [4, 4], '__builtins__': <module 'builtins' (built-in)>, '__package__': None, '__name__': '__main__', 'foo': <funct
    ion foo at 0x00BBCFA8>, '__doc__': None}
    >>>
    comme tu peut le voir une fois dans l'espace global, ma variable b n'existe plus.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  5. #5
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Par défaut
    dans ce cas il suffiré que je fasse mon interface directement non ??

    pourtant sa ne marche pas -_-

    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
    #-*- coding:utf-8 -*-
     
    import md5
    from sys import *
    from Tkinter import *
    global entree, entree2
    lignes=[]
    dicoMots_md5 = {}
     
    def commencer():
        file = open("Mots_md5.txt","r")
        ligne = file.readlines()
        ligne="".join(ligne)
        ligne=ligne.split(" ")
        for mot in ligne:
            m=md5.new(mot)
            m= m.hexdigest()
            dicoMots_md5[mot]=m
     
     
    def Test():
        entree = entree.get()
        entree2 = entree2.get()
        if entree == None:
            Dhash()
        else:
            Hash()
     
    def Hash():
        entree = str(entree)
        m = md5.new(entree)
        m = m.hexdigest()
        print m
     
    def Dhash():
        for i in dicoMots_md5:
            m = md5.new(i)
            m = hexdigest()
            if m == dicoMots_md5.has_key(i):
                print i, m
                break
     
    fen = Tk()
    entree = Entry(fen)
    entree.grid(row=0, column = 1)
    text=Label(fen, text="Mot")
    text.grid(row = 0, column=0)
    entree2 = Entry(fen)
    entree2.grid(row=0, column = 2)
    text2=Label(fen, text="Hash")
    text2.grid(row=0, column=3)
    Button(fen, text="Commencer", command = Test).grid(row = 1,column=1)
    fen.mainloop()
     
    commencer()

  6. #6
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Petit exemple :

    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
     
    >>> a = 1
    >>> def foo() :
    ...     print( a )
    ...
    >>> def erreur() :
    ...     a = a+2
    ...
    >>> foo()
    1
    >>> erreur()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 2, in erreur
    UnboundLocalError: local variable 'a' referenced before assignment
    Explication :

    Lors de l'appelle de foo, python cherche la variable "a" dans l'espace local.
    Ne la trouvant pas, il la cherche dans l'espace global, la trouve et l'affiche.

    Lors de l'appelle de erreur, une variable "a" est déclarer ( a = ). Ensuite on souhaite affecter "a" + 2 à "a" Python vas chercher "a" dans l'espace local, il la trouve puisqu'elle a été déclarée. Seulement, elle est vide.

    Dans le langage C, la déclaration des variables se fait à part.
    En python, une variable est déclarée dès qu'un nouvel identifiant est écrit à gauche du signe égal.

    Pour l'utilisation du mot clé "global".

    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
     
    >>> a = 1
    >>> def foo():
    ...     a = 2
    ...
    >>> def foo2():
    ...     global a
    ...     a = 2
    ...
    >>>
    >>>
    >>> foo()
    >>> a
    1
    >>> foo2()
    >>> a
    2
    >>>
    global signifie, utilise l'identifiant qui est dans l'espace de nom globals.

    dans foo2, une nouvelle valeur est affectée à la variable "a" de l'espace globals.

    si tu écrit :
    global entree
    entree = xxx

    Tu n'a plus rien pour accéder a ton widget Entry.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Tu a aussi la possibilité d'utiliser le parent (je ne suis pas fan des globals ) en incluant ton def Test dans Interface et utiliser self.

    De ce fait les variables locales du parent Interface sont vues par Test.

  8. #8
    Membre confirmé

    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 70
    Par défaut
    ok merci pour toutes ces réponses très promptement donné. elles mon beaucoup servit. et maintenant tous marche.

    seul hic. je ne peut utilisé qu'une seule fois mon programme. après il faut que je le réouvre si je veut faire une autre recherche.

    quelqu'un peut m'aider la aussi ?

Discussions similaires

  1. [C#] Récupération des variables system...
    Par smyley dans le forum Windows Forms
    Réponses: 7
    Dernier message: 04/08/2005, 11h39
  2. [VC++] Récupération de variables d'environnement
    Par LeonardDev dans le forum MFC
    Réponses: 2
    Dernier message: 02/03/2005, 11h09
  3. [VB.NET] Problem de récupération de variable avec une DLL
    Par ludovic85 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 19/01/2005, 11h37
  4. Récupération de variable
    Par Fred- dans le forum ASP
    Réponses: 13
    Dernier message: 17/06/2004, 20h13
  5. Récupération de variables dynamiques complexes
    Par ludoboy dans le forum ASP
    Réponses: 7
    Dernier message: 24/05/2004, 17h51

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