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 :

mémoriser les valeurs des champs d'un popup


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut mémoriser les valeurs des champs d'un popup
    bonjour

    par clic droit un popup arrive, je veux memoriser avec lastcluster et lastdata les nombres des 2 derniers champs

    mais au prochain clic droit vous verrez que c'est toujours les valeurs initiales affichées
    je comprends pas pourquoi

    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    import sys
    import Tkinter
     
    root=Tkinter.Tk()
    can=Tkinter.Canvas(root, width=300, height=300)
    can.pack(fill="both", expand=1)
     
    def main(argv=None):
        root.bind('<Button-3>', ask)
        root.geometry('+300+300')
        can.create_text(10,100,text="10")
        can.create_text(10,200,text="20")
        can.create_text(8,240,text="y")
        can.create_text(100,8,text="10")
        can.create_text(200,8,text="20")
        can.create_text(240,7,text="x")
     
        root.mainloop()
        return 0
     
     
    fields = 'address', 'cluster', 'data'
    lastcluster=64
    lastdata=''
     
    def fetch(variables):
    #    for variable in variables:
    #        print 'Input => "%i"' % variable.get()  
        try:
            address=int(variables[0].get())
            print 'ad => "%i"' % address
        except ValueError:
            address=None
            print 'ad => none' 
        try:
            cluster=int(variables[1].get())
            print 'cl => "0x%X"' % cluster
        except ValueError:
            cluster=None
            print 'cl => none' 
        try:
            i=int(variables[2].get())
            ii=str(i)
            data=[]
            tp=''
            for pos, ch in enumerate(ii):
                tp+=ch 
                if pos%2==1:
                    data.append(int(tp))
                    tp=''
            for j in range(len(data)):
                print ' "%i"' % data[j]
        except ValueError:
            data=[]
            print 'dat => none'   
    #    _t.send(address, cluster, data)
     
    def makeform(root, fields):
        form = Tkinter.Frame(root)                              
        left = Tkinter.Frame(form)                              
        rite = Tkinter.Frame(form)
        form.pack(fill=Tkinter.X) 
        left.pack(side=Tkinter.LEFT)
        rite.pack(side=Tkinter.RIGHT, expand=Tkinter.YES, fill=Tkinter.X)      
     
        variables=[]
        for i,field in enumerate(fields):
            lab = Tkinter.Label(left, width=7, text=field)     
            ent = Tkinter.Entry(rite)
            lab.pack(side=Tkinter.TOP)
            ent.pack(side=Tkinter.TOP, fill=Tkinter.X)
            var=Tkinter.StringVar()
            ent.config(textvariable=var)              
            if field== 'cluster':
                var.set(lastcluster)
            else:
                pass
            variables.append(var)
        return variables
     
     
    def show(variables):
        popup.destroy()                
        fetch(variables)
        lastcluster=int(variables[1].get()) 
        print "show ",int(variables[1].get()), lastcluster           
     
    def ask(event):
        global popup
        popup = Tkinter.Toplevel()
        popup.geometry('+%d+%d' %(root.winfo_rootx()+240, root.winfo_rooty()) )
        id=22
        vars = makeform(popup, fields)
        print "ask ",int(vars[1].get()), lastcluster
        Tkinter.Button(popup, text='OK', command=(lambda v=vars: show(v)) ).pack()
        popup.focus_set()
        popup.wait_window()
     
     
    if __name__ == "__main__":
        sys.exit(main())
     
    sys.exit(main())

  2. #2
    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
    Bonjour ____22,

    La seule modification de lastcluster que je vois c'est celle de la variable locale dans show. Comme sa valeur viens de la globale (lastcluster=64/vars = makeform(fields)/var.set(lastcluster)) normal que cela ne bouge pas.
    Attention avec vars qui est l'équivalent de locals() ou sert à retourner le __dict__ d'un objet.

    Bon code

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Bonjour ____22,

    La seule modification de lastcluster que je vois c'est celle de la variable locale dans show. Comme sa valeur viens de la globale (lastcluster=64/vars = makeform(fields)/var.set(lastcluster)) normal que cela ne bouge pas.
    Attention avec vars qui est l'équivalent de locals() ou sert à retourner le __dict__ d'un objet.

    Bon code
    enfin j'ai déclarer lastcluster en global au début
    j'ai essayé aussi avec "global lastcluster" mais on a le meme probleme, python ne retrouve pas cette variable globale
    comment faire svp?

  4. #4
    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
    La mettre en global dans la fonction.

    @+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 252
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    La mettre en global dans la fonction.

    @+
    merci ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-97] Mémoriser les valeurs des champs pour usage ultérieur
    Par docjo dans le forum VBA Access
    Réponses: 4
    Dernier message: 12/10/2009, 15h52
  2. Lien avec les valeurs des champs HTML?
    Par insane_80 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/07/2007, 08h45
  3. Réponses: 2
    Dernier message: 11/12/2006, 12h38
  4. [XSLT] Récupérer les valeur des champs
    Par webspeak dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/11/2006, 17h17
  5. Récupérer les valeurs des champs créés dynamiquement
    Par outlawz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/05/2006, 16h32

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