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 :

Affectation d'une entrée clavier à une variable


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 23
    Points
    23
    Par défaut Affectation d'une entrée clavier à une variable
    Bonjour,

    J'ai un petit problème de débutant, j'ai fait une jolie interface graphique avec des
    Entry des boutons etc.
    J'aimerais affecter une variable avec la valeur que j'ai encodée dans la zone d'entrée quand j'appuie sur le bouton OK
    Et je n'y arrive pas ...
    Voila ce que j'ai:
    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
     
    #-*- coding: latin-1 -*-
    from Tkinter import *  
     
    ncpt="essai"
    num="num-num-num"
    mont=0.00
     
    class Createcpt:
     
     
    	def nouvcpt():
    		"test de la fonction"
    		ncpt=entnom
    		num=entnum1 + "-" + entnum2 + "-" +entnum3
    		mont = entmont
     
    		print "Création du fichier",ncpt ,num,mont
    		if ncpt !="essai":
    			if num !="num-num-num":
    				print "Création du fichier",ncpt ,num,mont
     
     
    	# Programme principal
    	newcpt=Tk()
    	newcpt.title("Création d'un nouveau compte principal") 
    	labnom=Label(newcpt,text='Nom du compte : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
    	labnom.grid(row=1,column=1,padx=15,pady=15,sticky=W)
     
    	Lg=StringVar
    	entnom=Entry(newcpt,fg='blue',textvariable=Lg,width=25,font=("Times new roman",14,"bold"))
    	entnom.grid(row=1,column=2,padx=5,pady=5,columnspan=6)
     
     
    	labnum=Label(newcpt,text='Numéro de compte : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
    	labnum.grid(row=2,column=1,padx=15,pady=15,sticky=W)
     
    	Lg=StringVar
    	entnum1=Entry(newcpt,fg='blue',textvariable=Lg,width=3,font=("Times new roman",14,"bold"))
    	entnum1.grid(row=2,column=2,padx=5,pady=5,sticky=W)
     
    	labT1=Label(newcpt,text='-',fg='blue',font=("Times new roman",24,"bold"))
    	labT1.grid(row=2,column=3,padx=2,pady=2,sticky=W)
     
    	Lg=StringVar
    	entnum2=Entry(newcpt,fg='blue',textvariable=Lg,width=7,font=("Times new roman",14,"bold"))
    	entnum2.grid(row=2,column=4,padx=5,pady=5,sticky=W)
     
    	labT2=Label(newcpt,text='-',fg='blue',font=("Times new roman",24,"bold"))
    	labT2.grid(row=2,column=5,padx=2,pady=2,sticky=W)
     
    	Lg=StringVar
    	entnum3=Entry(newcpt,fg='blue',textvariable=Lg,width=2,font=("Times new roman",14,"bold"))
    	entnum3.grid(row=2,column=6,padx=5,pady=5,sticky=W)
     
     
    	labmont=Label(newcpt,text='Montant de départ : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
    	labmont.grid(row=3,column=1,padx=15,pady=15,sticky=W)
     
    	Lg=StringVar
    	entmont=Entry(newcpt,fg='blue',textvariable=Lg,width=10,font=("Times new roman",14,"bold"))
    	entmont.grid(row=3,column=2,padx=5,pady=5,sticky=W,columnspan=6)
     
     
    	conf=Button(newcpt,text='Création',command=nouvcpt)
    	conf.grid(row=10,column=1,padx=15,pady=15,sticky=W,columnspan=2)
     
    	fin=Button(newcpt,text='Terminer',command=newcpt.destroy)
    	fin.grid(row=10,column=2,padx=15,pady=15,sticky=W,columnspan=6)
     
    	newcpt.mainloop()
     
    cela peut sembler idiot, mais je n'arrive pas à comprendre comment faire pour que quand j'appuie sur le bouton "Création" j'obtienne bien
     
    ncpt=entnom
    num=entnum1 + "-" + entnum2 + "-" +entnum3
    mont = entmont
     
    pour le moment j'obtiens : 
     
    python -u "Createcpt.py"
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "lib-tk/Tkinter.py", line 1406, in __call__
        return self.func(*args)
      File "Createcpt.py", line 13, in nouvcpt
        ncpt=entnom
    NameError: global name 'entnom' is not defined
    J'y comprend rien: à quoi cela me sert de créer des zones de texte si je ne sais pas travailler avec les données que j'y ai introduite !!

    Je sais ca peut sembler idiot mais je ne trouve pas comment faire dans tous mes livres...

    Quelqu'un pourrait-il m'aider ??

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    pour les 'entry' de Tkinter il faut utiliser la methode get()

    dans ton cas entnom.get() mais dans une classe il vaut mieu que tu appelles tes entry 'self.entnom' pour quelles soient accessiblent dans toute la classe.

    voila ce que ca donnes (j'ai fait ca vite fait)
    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
     
    #-*- coding: latin-1 -*-
    from Tkinter import *
     
    ncpt="essai"
    num="num-num-num"
    mont=0.00
     
    class Createcpt(Frame):
        def __init__(self):
            Frame.__init__(self)
            self.creategui()
            self.pack()
            self.mainloop()
     
        def nouvcpt(self):
                "test de la fonction"
                ncpt=self.entnom.get()
                num=self.entnum1.get() + "-" + self.entnum2.get() + "-" +self.entnum3.get()
                mont = self.entmont.get()
     
                print "Création du fichier",ncpt ,num,mont
                if ncpt !="essai":
                        if num !="num-num-num":
                                print "Création du fichier",ncpt ,num,mont
     
     
        def creategui(self):
        # gui 
            labnom=Label(self,text='Nom du compte : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
            labnom.grid(row=1,column=1,padx=15,pady=15,sticky=W)
     
            Lg=StringVar
            self.entnom=Entry(self,fg='blue',textvariable=Lg,width=25,font=("Times new roman",14,"bold"))
            self.entnom.grid(row=1,column=2,padx=5,pady=5,columnspan=6)
     
            labnum=Label(self,text='Numéro de compte : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
            labnum.grid(row=2,column=1,padx=15,pady=15,sticky=W)
     
            Lg=StringVar
            self.entnum1=Entry(self,fg='blue',textvariable=Lg,width=3,font=("Times new roman",14,"bold"))
            self.entnum1.grid(row=2,column=2,padx=5,pady=5,sticky=W)
     
            labT1=Label(self,text='-',fg='blue',font=("Times new roman",24,"bold"))
            labT1.grid(row=2,column=3,padx=2,pady=2,sticky=W)
     
            Lg=StringVar
            self.entnum2=Entry(self,fg='blue',textvariable=Lg,width=7,font=("Times new roman",14,"bold"))
            self.entnum2.grid(row=2,column=4,padx=5,pady=5,sticky=W)
     
            labT2=Label(self,text='-',fg='blue',font=("Times new roman",24,"bold"))
            labT2.grid(row=2,column=5,padx=2,pady=2,sticky=W)
     
            Lg=StringVar
            self.entnum3=Entry(self,fg='blue',textvariable=Lg,width=2,font=("Times new roman",14,"bold"))
            self.entnum3.grid(row=2,column=6,padx=5,pady=5,sticky=W)
     
     
            labmont=Label(self,text='Montant de départ : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
            labmont.grid(row=3,column=1,padx=15,pady=15,sticky=W)
     
            Lg=StringVar
            self.entmont=Entry(self,fg='blue',textvariable=Lg,width=10,font=("Times new roman",14,"bold"))
            self.entmont.grid(row=3,column=2,padx=5,pady=5,sticky=W,columnspan=6)
     
     
            conf=Button(self,text='Création',command=self.nouvcpt)
            conf.grid(row=10,column=1,padx=15,pady=15,sticky=W,columnspan=2)
     
            fin=Button(self,text='Terminer',command=self.fexit)
            fin.grid(row=10,column=2,padx=15,pady=15,sticky=W,columnspan=6)
     
        def fexit(self):
            self.quit()
            self.destroy()
            exit()
     
     
     
    if __name__=="__main__":
        app=Createcpt()

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 23
    Points
    23
    Par défaut Ca m'a l'air bien compliqué !!
    Merci pour ton aide,

    Cela m'a l'air bien compliqué, faut-il vraiment ajouter tant de fonction ??
    En fait cette classe fait partir d'un ensemble de classe +/- 20 que j'apelle séparément par 'import" à l'aide d'un widget maître (barre d'outils)
    Faut-il absolument ajouter:

    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
    def __init__(self):
           Frame.__init__(self)
           self.creategui()
           self.pack()
           self.mainloop()
    .
    .
    .
    .
    .
    def fexit(self):
           self.quit()
           self.destroy()
           exit()
     
     
     
    if __name__=="__main__":
       app=Createcpt()8O
    André

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    _dans une classe héritée (ici de la classe frame), la fonction init est obligatoire oui.
    _la fonction fexit est bien sur facultative car elle sert a sortir du programme dans ton cas fermer la fenêtre suffira.
    _le programme principal if __name__ ... est facultatif il ne sert qu'a tester la classe en 'standalone'.

    ceci dis tu peux aussi utiliser des variables globales .. mais ton programme avait de toutes façon des problèmes d'indentations et fonctionnait de manière .. custom, je dirais...
    EDIT
    j'ai eu 5 mins, alors j'ai corrigé un peu le code... c'est mieux
    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
     
    #-*- coding: latin-1 -*-
    from Tkinter import *
     
    ncpt="essai"
    num="num-num-num"
    mont=0.00
     
    class Createcpt(Frame):
        def __init__(self,master=None):
            Frame.__init__(self,master)
            self.creategui()
            self.pack()
     
        def nouvcpt(self):
                "test de la fonction"
                ncpt=self.entnom.get()
                num=self.entnum1.get() + "-" + self.entnum2.get() + "-" +self.entnum3.get()
                mont = self.entmont.get()
     
                print "Création du fichier",ncpt ,num,mont
                if ncpt !="essai":
                        if num !="num-num-num":
                                print "Création du fichier",ncpt ,num,mont
     
     
        def creategui(self):
        # gui 
            labnom=Label(self,text='Nom du compte : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
            labnom.grid(row=1,column=1,padx=15,pady=15,sticky=W)
     
            Lg=StringVar
            self.entnom=Entry(self,fg='blue',textvariable=Lg,width=25,font=("Times new roman",14,"bold"))
            self.entnom.grid(row=1,column=2,padx=5,pady=5,columnspan=6)
     
            labnum=Label(self,text='Numéro de compte : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
            labnum.grid(row=2,column=1,padx=15,pady=15,sticky=W)
     
            Lg=StringVar
            self.entnum1=Entry(self,fg='blue',textvariable=Lg,width=3,font=("Times new roman",14,"bold"))
            self.entnum1.grid(row=2,column=2,padx=5,pady=5,sticky=W)
     
            labT1=Label(self,text='-',fg='blue',font=("Times new roman",24,"bold"))
            labT1.grid(row=2,column=3,padx=2,pady=2,sticky=W)
     
            Lg=StringVar
            self.entnum2=Entry(self,fg='blue',textvariable=Lg,width=7,font=("Times new roman",14,"bold"))
            self.entnum2.grid(row=2,column=4,padx=5,pady=5,sticky=W)
     
            labT2=Label(self,text='-',fg='blue',font=("Times new roman",24,"bold"))
            labT2.grid(row=2,column=5,padx=2,pady=2,sticky=W)
     
            Lg=StringVar
            self.entnum3=Entry(self,fg='blue',textvariable=Lg,width=2,font=("Times new roman",14,"bold"))
            self.entnum3.grid(row=2,column=6,padx=5,pady=5,sticky=W)
     
     
            labmont=Label(self,text='Montant de départ : ',fg='blue',font=("Times new roman",14,"bold",'underline'))
            labmont.grid(row=3,column=1,padx=15,pady=15,sticky=W)
     
            Lg=StringVar
            self.entmont=Entry(self,fg='blue',textvariable=Lg,width=10,font=("Times new roman",14,"bold"))
            self.entmont.grid(row=3,column=2,padx=5,pady=5,sticky=W,columnspan=6)
     
     
            conf=Button(self,text='Création',command=self.nouvcpt)
            conf.grid(row=10,column=1,padx=15,pady=15,sticky=W,columnspan=2)
     
            fin=Button(self,text='Terminer',command=self.fexit)
            fin.grid(row=10,column=2,padx=15,pady=15,sticky=W,columnspan=6)
     
        def fexit(self):
            self.quit()
     
     
     
    if __name__=="__main__":
        mainwindow=Tk()
        app=Createcpt(master=mainwindow)
        app.master.title("Créer un compte")
        app.mainloop()
        mainwindow.destroy()
    enjoy

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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