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 pour définir des valeurs


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut Entry pour définir des valeurs
    Bonjour tout le monde,
    Dans le cadre d'un TPE je code un programme pour calculer la valeur d'une force selon des valeurs entrées par l'utilisateur.
    Comme vous pouvez le voir le programme est loin d'être finit mais je bloque sur un problème dont je ne trouve pas l'origine:
    les valeurs entrées ne remplace jamais les valeurs du début, en effet les valeurs restent a 0 et lors de la pression des buttons aucun message d'erreur ne s'affiche. Je pense que le problème viens de la définition de mes entry.

    Merci de votre aide.

    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
    # -*- coding: latin-1 -*-
    # Programme visant a déterminer la force exercé entre une planète et un satelite
    from Tkinter import *
     
    d,mp,ms,f=0,0,0,0
     
    #Liste des fonctions pour les boutons
     
    #definition distance planète/satelite
    def Valider():
        d=str(e1.get())
     
    #definition masse de la planète
    def Valider1():
        mp=str(e2.get())
     
    #definition masse du satelite
    def Valider2():
        ms=str(e3.get())
     
    #affichage du resultat
    def Valider3():
        #f=6.67e-11*((ms*mp)/d*d)
        #F.set(f)
        print d,mp,ms,f # test des valeurs
     
    # groupe entry bouton pour d
    racine=Tk()
    D=IntVar()
    D.set(1)
    e1=Entry(racine,textvariable=D)
    e1.pack()
    launch=Button(racine, text='VALIDER',command=Valider,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch.pack()
    txt=Label(racine,text=D)
     
    # groupe entry bouton pour mp
    MP=IntVar()
    MP.set(0)
    e2=Entry(racine,textvariable=MP)
    e2.pack()
    launch1=Button(racine, text='VALIDER',command=Valider1,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch1.pack()
    txt=Label(racine,text=MP)
     
    # groupe entry bouton pour ms
    MS=IntVar()
    MS.set(0)
    e3=Entry(racine,textvariable=MS)
    e3.pack()
    launch2=Button(racine, text='VALIDER',command=Valider2,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch2.pack()
    txt=Label(racine,text=MS)
     
    # groupe entry bouton pour le résultat
    F=IntVar()
    F.set(0)
    e3=Entry(racine,textvariable=F)
    e3.pack()
    launch3=Button(racine, text='VALIDER',command=Valider3,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch3.pack()
    txt=Label(racine,text=MS)
     
     
    racine.mainloop()

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 160
    Par défaut
    Salut, tout va bien dans la définition de tes entry, le problème vient de tes méthodes afficher!!!, elles définissent d, mp et ms à l'intérieur d'une définition, elles sont donc "locales" et indépendantes des d, mp, ms définies tout au début et égales à 0.

    Pour définir une variable globale, il faut mettre "global", devant et l'annoncer aussi dans chaque méthode que tu utilises pour indiquer à la méthode que c'est la variable d.... globale dont tu parles.

    A vue de nez, moi j'utiliserai directement e1.get() dans ton print final, cela évite d'avoir à valider les valeurs avant de pouvoir les imprimer (fait le test avec le code qui suit)... evidemment sauf si c'est fait exprès l'étape de validation ;-)

    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
    # -*- coding: latin-1 -*-
    # Programme visant a déterminer la force exercé entre une planète et un satelite
    from Tkinter import *
     
    global d,mp,ms,f
    d,mp,ms,f=0,0,0,0
     
    #Liste des fonctions pour les boutons
     
    #definition distance planète/satelite
    def Valider():
        global d
        d=str(e1.get())
     
    #definition masse de la planète
    def Valider1():
        global mp
        mp=str(e2.get())
     
    #definition masse du satelite
    def Valider2():
        global ms
        ms=str(e3.get())
     
    #affichage du resultat
    def Valider3():
        global d,mp,ms,f
        #f=6.67e-11*((ms*mp)/d*d)
        #F.set(f)
        print d,mp,ms,f # test des valeurs
     
        #ce serait mieux sans les global et directement comme ca:
        print e1.get(), e2.get(), e3.get()
     
    # groupe entry bouton pour d
    racine=Tk()
    D=IntVar()
    D.set(1)
    e1=Entry(racine,textvariable=D)
    e1.pack()
    launch=Button(racine, text='VALIDER',command=Valider,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch.pack()
    txt=Label(racine,text=D)
     
    # groupe entry bouton pour mp
    MP=IntVar()
    MP.set(0)
    e2=Entry(racine,textvariable=MP)
    e2.pack()
    launch1=Button(racine, text='VALIDER',command=Valider1,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch1.pack()
    txt=Label(racine,text=MP)
     
    # groupe entry bouton pour ms
    MS=IntVar()
    MS.set(0)
    e3=Entry(racine,textvariable=MS)
    e3.pack()
    launch2=Button(racine, text='VALIDER',command=Valider2,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch2.pack()
    txt=Label(racine,text=MS)
     
    # groupe entry bouton pour le résultat
    F=IntVar()
    F.set(0)
    e3=Entry(racine,textvariable=F)
    e3.pack()
    launch3=Button(racine, text='VALIDER',command=Valider3,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch3.pack()
    txt=Label(racine,text=MS)
     
     
    racine.mainloop()

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    ok merci mec tu a répondue a un certain nombre de mes réponses dans ta correction, merci. Je compte utiliser ces valeurs dans une représentation par turtle et agrémente le programme d'explications par des Labels. Par hasard tu ne sais pas si on peut placer une fenêtre turtle dans une fenêtre TK?

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 160
    Par défaut
    désolé, je n'ai jamais utilisé le module turtle, mais tu trouveras certainement tes réponses dans le tutorial "python notes" ici:
    http://python.developpez.com/cours/T...Chapitre6#L6.3

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Le module turtle permet de dessiner sur un Canvas de Tkinter. Et de toute façon, turtle est basé sur Tkinter. Il suffit de passer le canvas au constructeur de RawPen ou TurtleScreen (Python 2.6)
    Tu as aussi en Python 2.6 la classe turtle.ScrolledCanvas qui est un widget à part entière.

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 6
    Par défaut
    merci de ta réponse, après avoir chercher ce qu'était une classe j'ai aboutit au code ci-dessous mais qui me renvoie l'erreur suivante:
    " File "C:\Bureau\Pyhton\TPE\LE programme V1.2.py", line 86, in <module>
    class turtleScrolledCavas(fond):
    TypeError: Error when calling the metaclass bases
    __init__() takes at most 3 arguments (4 given)
    Je n'en comprend pas l'origine.

    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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    # -*- coding: latin-1 -*-
    # Programme visant a determiner la force exercee entre une planete et un satelite
     
    from Tkinter import *
    from math import *
    from turtle import *
     
    global d,mp,ms,f,r,z,g,v
    d,mp,ms,f,r,z,g,v=0,0,0,0,0,0,0,0
     
     
     
    #récupération des données et calcul
     
    def Valider():
        global d,mp,ms,f,r,z,g,v
        r=int(e1.get())
        z=int(e1b.get())
        d=int(e1.get())+int(e1b.get())
        mp=int(e2.get())
        ms=int(e3.get())
        f=6.67e-11*((ms*mp)/d*d)
        g=(6.64e-11*mp)/((r+z)*(r+z))
        v=sqrt(g*mp/(r+z)) 
        V.set(v)
        F.set(f)
     
    racine=Tk()
     
    txt1=Label(racine,text='r rayon de la planète en m')
    txt1.pack()
    txt1b=Label(racine,text='z altitude du satellite en m')
    txt1b.pack()
    txt2=Label(racine,text='mp masse de la planète en Kg')
    txt2.pack()
    txt3=Label(racine,text='ms masse du sattelite en Kg')
    txt3.pack() 
    txt4=Label(racine,text='f valeur de la force exerce entre la planète et le satelite en N')
    txt4.pack()
    txt5=Label(racine,text='v vitesse en m/s')
    txt5.pack()
     
     
    # groupe entry bouton pour d
     
    R=IntVar()
    R.set(0)
    e1=Entry(racine,textvariable=R)
    e1.pack()
     
    Z=IntVar()
    Z.set(0)
    e1b=Entry(racine,textvariable=Z)
    e1b.pack()
     
     
     
    # groupe entry bouton pour mp
    MP=IntVar()
    MP.set(0)
    e2=Entry(racine,textvariable=MP)
    e2.pack()
     
     
    # groupe entry bouton pour ms
    MS=IntVar()
    MS.set(0)
    e3=Entry(racine,textvariable=MS)
    e3.pack()
     
     
    # groupe entry bouton pour le resultat
    F=IntVar()
    F.set(0)
    e4=Entry(racine,textvariable=F)
    e4.pack()
     
    V=IntVar()
    V.set(0)
    e5=Entry(racine,textvariable=V)
    e5.pack()
     
     
    fond=Canvas(racine, height=100, width=200)
    fond.pack()
    class turtleScrolledCavas(fond):
        "transforme un canvas en canvas pour trurtle"
     
     
     
     
     
    launch=Button(racine, text='VALIDER',command=Valider,relief='raised',fg="#555500",font=('Helvetica', 10, 'bold'))
    launch.pack()
     
    quitter=Button(racine,text='Quitter',command=racine.quit)
    quitter.pack()
     
    txt1.grid(row=0,column=0)
    txt1b.grid(row=1,column=0)
    txt2.grid(row=2,column=0)
    txt3.grid(row=3,column=0)
    txt4.grid(row=5,column=0)
    txt5.grid(row=6,column=0)
     
     
    e1.grid(row=0,column=1)
    e1b.grid(row=1,column=1)
    e2.grid(row=2,column=1)
    e3.grid(row=3,column=1)
    e4.grid(row=5,column=1)
    e5.grid(row=6,column=1)
     
    fond.grid(row=0,column=3)
     
     
    launch.grid(row=4,column=1)
    quitter.grid(row=7,column=0)
     
     
    racine.mainloop()

Discussions similaires

  1. Problème pour définir une valeur dans la base des registres
    Par hellspawn_ludo dans le forum Dreamshield
    Réponses: 2
    Dernier message: 30/09/2007, 03h03
  2. Meilleur type table pour stocker des valeurs numérique
    Par vodevil dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/04/2006, 20h42
  3. [Javascript] PB pour récupérer des valeurs !
    Par chaser_T dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/04/2006, 10h26
  4. Boucler sur une table pour renommer des valeurs
    Par webwhisky dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/01/2006, 14h19
  5. Réponses: 6
    Dernier message: 22/11/2005, 17h08

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