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 :

utilisation de la fonction get pour des graphiques


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut utilisation de la fonction get pour des graphiques
    Bonjour,
    Malgré une lecture assidue des tutoriels je bute sur une difficulté qui devrait sembler élémentaire.
    Débutant dans ce langage je voudrais tracer dans une fenêtre une courbe après avoir saisi un paramètre.J'évite à ce stade de passer par les classes .
    Le code joint relatif à un tir balistique me permet bien de tracer une courbe mais je souhaiterais que cette courbe n'apparaisse qu'après avoir prélevé la valeur de l'angle de lancement initial (angd); or je peux très bien entrer cette valeur initiale mais ceci est sans effet.
    J'ai bien essayé la fonction get mais sans succès.
    Merci de me mettre sur la voie.
    # Exercice utilisant la bibliothèque graphique Tkinter
    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
    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
    from tkinter import *
    import time
    from math import cos, tan, pi 
     
    def cercle(x, y, r, coul='black'):
        "tracé d'un cercle de centre (x,y) et de rayon r"
        can.create_oval(x-r, y-r, x+r, y+r, outline=coul,fill='red')
    def effacecercle (x,y,r,coul='white'):
        can.create_oval(x-r, y-r, x+r, y+r, outline='white',fill='white')
    def figure_1():
        global X, Y,h,L, Xp,Yp,angd, LaxeY, LaxeX,pY,pX,entr1 #X,Y coordonnées absolues dans can
     
        x = 50
        # Effacer d'abord tout dessin préexistant :
        #can.delete(ALL)????????????????????????????????????????????????
            #création des axes
    #tracé axe des abscisses
        can.create_line(70,Hcan-50,70+LaxeX,Hcan-50,width=1,fill='red')
    #tracé axe des ordonnées
        can.create_line(70,50,70,50+LaxeY,width=1,fill='red')
    #création des graduations
        #graduations abscisses
        can.create_line(70+pX,50+LaxeY,70+pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+2*pX,50+LaxeY,70+2*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+3*pX,50+LaxeY,70+3*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+4*pX,50+LaxeY,70+4*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+5*pX,50+LaxeY,70+5*pX,50+LaxeY+13,width=1,fill='red')
        can.create_line(70+6*pX,50+LaxeY,70+6*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+7*pX,50+LaxeY,70+7*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+8*pX,50+LaxeY,70+8*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+9*pX,50+LaxeY,70+9*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+10*pX,50+LaxeY,70+10*pX,50+LaxeY+13,width=1,fill='red')
        # affichage type de coordonnées sur les axex
         #abscisses
        can.create_text(1250,770,text="L(m)")
        can.create_text(185,770,text="1")
        can.create_text(645,770,text="5")
         #ordonnées
        can.create_text(50,80,text="h(m)")
        can.create_text(50,650,text="1")
        can.create_text(50,250,text="5")
        #graduations ordonnées
        can.create_line(70,50+LaxeY-pY,70-10,50+LaxeY-pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-2*pY,70-10,50+LaxeY-2*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-3*pY,70-10,50+LaxeY-3*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-4*pY,70-10,50+LaxeY-4*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-5*pY,70-13,50+LaxeY-5*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-6*pY,70-10,50+LaxeY-6*pY,width=1,fill='red')
     
     
     
     
    #?????????????????????????????????????????????
        #entrée des valeurs de l'angle de tir en degrés
        txt1=Label(fen, text = 'angle de tir en degré')
        txt1.place(x=100,y=100)
        #txt1.pack(side = LEFT)
        entr1=Entry(fen)
        #entr1.pack(side = TOP)
        #new
        entr1.place(x=150,y=150)
        #??????????????????????????????????????
        #?????????????????????????????????????
     
     
    #??????????????????????????????????????????????    
        #tracé de la courbe
        #can.create_oval(100-10, 100-10, 100+10, 100+10, outline='green',fill='red')
        rayon=10
        #angd=60
        while L< 10:
            Xp, Yp = X, Y
            ang=pi*angd/180
            effacecercle(X, Y, rayon)
            h= -0.5*9.81*L*L/(v0*v0*cos(ang)*cos(ang))+L*tan(ang)
            X=70+LaxeX*L/10
            Y=-LaxeY*h/6+50+LaxeY # en instance 
            can.create_line(Xp, Yp, X, Y, fill ='black')
     
            cercle(X, Y, rayon)
            can.update()
            time.sleep(0.3) 
     
            L +=0.1 
     
    ##### Programme principal : ############
    # initialisation des coordonnées, des vitesses et du témoin d'animation :    
    #70px=décalage vers la droite de l'axe des ordonnées
    L,flag ,Lcan, Hcan= 0,0,1400,800
    X=70
    Y = Hcan -50
    v0=10
    angd=45
    #Lcan=largeur du canevas  Hcan= hauteur du canevas
    LaxeX=Lcan-250 #largeur axes des abscisses
    LaxeY=Hcan-100 #longueur axe des ordonnées
    pX = LaxeX/10 #pas de graduation x pour 10 intervalles
    pY = LaxeY/7 #pas de graduation y pour 10 intervalles
     
    h=0
    L=0
    fen = Tk()
    fen.title('Balistique')
    can = Canvas(fen, width=Lcan, height=Hcan, bg='white')
    can.pack()
     
     
     
    Button(fen, text ='Lancer', command =figure_1).pack(side=RIGHT, padx=10)
     
    fen.mainloop()

  2. #2
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Pourriez vous s il vous plait reposter le code, a l aide de la balise CODE? le "#"
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  3. #3
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Lorsque vous parlez de .get() je présume que vous parlez de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    entr1=Entry(fen)
    #entr1.pack(side = TOP)
    #new
    entr1.place(x=150,y=150)
    Il manque sans doute de la communication entre le Widget Entry et le code, non ? (textvariable/StringVar())

    Revenez avec les balises code.

    @+

    Note: .place() ? Pourquoi ce Geometry Manager ici ?!
    Merci d'utiliser le forum pour les questions techniques.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut utilisation de la fonction get pour des graphiques
    Bonjour et merci
    J'utilise cette fois la balise code.
    Concernant l'utilisation de geometry place j'ai utilisé cette fonction car dans un premier temps alors que j'utilisais 'grid' dans l'intention de superposer plusieurs courbes,je voyais s'ajouter sur la fenêtre les cadres de saisie en dessous les uns des autres .
    Mais surtout je n'arrive pas à établir la communication entre le widget entry et le code.
    Peut-être que mon programme est trop prétentieux pour un débutant.
    J'en était resté à quick basic et j'ai du prendre de mauvaises habitudes.
    Si l'envie vous prend de consulter mes vieux programmes vous comprendrez ce que j'attends de python-cette remarque n'étant pas publicitaire.
    http://perso.numericable.fr/phyprime/

    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
     
    from tkinter import *
    import time
    from math import cos, tan, pi
     
    def cercle(x, y, r, coul='black'):
    "tracé d'un cercle de centre (x,y) et de rayon r"
    can.create_oval(x-r, y-r, x+r, y+r, outline=coul,fill='red')
    def effacecercle (x,y,r,coul='white'):
    can.create_oval(x-r, y-r, x+r, y+r, outline='white',fill='white')
    def figure_1():
    global X, Y,h,L, Xp,Yp,angd, LaxeY, LaxeX,pY,pX,entr1 #X,Y coordonnées absolues dans can
     
    x = 50
    # Effacer d'abord tout dessin préexistant :
    #can.delete(ALL)????????????????????????????????????????????????
    #création des axes
    #tracé axe des abscisses
    can.create_line(70,Hcan-50,70+LaxeX,Hcan-50,width=1,fill='red')
    #tracé axe des ordonnées
    can.create_line(70,50,70,50+LaxeY,width=1,fill='red')
    #création des graduations
    #graduations abscisses
    can.create_line(70+pX,50+LaxeY,70+pX,50+LaxeY+10,width=1,fill='red')
    can.create_line(70+2*pX,50+LaxeY,70+2*pX,50+LaxeY+10,width=1,fill='red')
    can.create_line(70+3*pX,50+LaxeY,70+3*pX,50+LaxeY+10,width=1,fill='red')
    can.create_line(70+4*pX,50+LaxeY,70+4*pX,50+LaxeY+10,width=1,fill='red')
    can.create_line(70+5*pX,50+LaxeY,70+5*pX,50+LaxeY+13,width=1,fill='red')
    can.create_line(70+6*pX,50+LaxeY,70+6*pX,50+LaxeY+10,width=1,fill='red')
    can.create_line(70+7*pX,50+LaxeY,70+7*pX,50+LaxeY+10,width=1,fill='red')
    can.create_line(70+8*pX,50+LaxeY,70+8*pX,50+LaxeY+10,width=1,fill='red')
    can.create_line(70+9*pX,50+LaxeY,70+9*pX,50+LaxeY+10,width=1,fill='red')
    can.create_line(70+10*pX,50+LaxeY,70+10*pX,50+LaxeY+13,width=1,fill='red')
    # affichage type de coordonnées sur les axex
    #abscisses
    can.create_text(1250,770,text="L(m)")
    can.create_text(185,770,text="1")
    can.create_text(645,770,text="5")
    #ordonnées
    can.create_text(50,80,text="h(m)")
    can.create_text(50,650,text="1")
    can.create_text(50,250,text="5")
    #graduations ordonnées
    can.create_line(70,50+LaxeY-pY,70-10,50+LaxeY-pY,width=1,fill='red')
    can.create_line(70,50+LaxeY-2*pY,70-10,50+LaxeY-2*pY,width=1,fill='red')
    can.create_line(70,50+LaxeY-3*pY,70-10,50+LaxeY-3*pY,width=1,fill='red')
    can.create_line(70,50+LaxeY-4*pY,70-10,50+LaxeY-4*pY,width=1,fill='red')
    can.create_line(70,50+LaxeY-5*pY,70-13,50+LaxeY-5*pY,width=1,fill='red')
    can.create_line(70,50+LaxeY-6*pY,70-10,50+LaxeY-6*pY,width=1,fill='red')
     
     
     
     
    #?????????????????????????????????????????????
    #entrée des valeurs de l'angle de tir en degrés
    txt1=Label(fen, text = 'angle de tir en degré')
    txt1.place(x=100,y=100)
    #txt1.pack(side = LEFT)
    entr1=Entry(fen)
    #entr1.pack(side = TOP)
    #new
    entr1.place(x=150,y=150)
    #??????????????????????????????????????
    #?????????????????????????????????????
     
     
    #??????????????????????????????????????????????
    #tracé de la courbe
    #can.create_oval(100-10, 100-10, 100+10, 100+10, outline='green',fill='red')
    rayon=10
    #angd=60
    while L< 10:
    Xp, Yp = X, Y
    ang=pi*angd/180
    effacecercle(X, Y, rayon)
    h= -0.5*9.81*L*L/(v0*v0*cos(ang)*cos(ang))+L*tan(ang)
    X=70+LaxeX*L/10
    Y=-LaxeY*h/6+50+LaxeY # en instance
    can.create_line(Xp, Yp, X, Y, fill ='black')
     
    cercle(X, Y, rayon)
    can.update()
    time.sleep(0.3)
     
    L +=0.1
     
    ##### Programme principal : ############
    # initialisation des coordonnées, des vitesses et du témoin d'animation :
    #70px=décalage vers la droite de l'axe des ordonnées
    L,flag ,Lcan, Hcan= 0,0,1400,800
    X=70
    Y = Hcan -50
    v0=10
    angd=45
    #Lcan=largeur du canevas Hcan= hauteur du canevas
    LaxeX=Lcan-250 #largeur axes des abscisses
    LaxeY=Hcan-100 #longueur axe des ordonnées
    pX = LaxeX/10 #pas de graduation x pour 10 intervalles
    pY = LaxeY/7 #pas de graduation y pour 10 intervalles
     
    h=0
    L=0
    fen = Tk()
    fen.title('Balistique')
    can = Canvas(fen, width=Lcan, height=Hcan, bg='white')
    can.pack()
     
     
     
    Button(fen, text ='Lancer', command =figure_1).pack(side=RIGHT, padx=10)
     
    fen.mainloop()
    luciendorali est actuellement connecté   	Envoyer un message privé Modifier/Supprimer le message

  5. #5
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    C'est pas encore cela la mise en page

    Sans trop toucher au code et en restant dans l'esprit
    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
    from tkinter import *
    import time
    from math import cos, tan, pi
     
    def cercle(x, y, r, coul='black'):
        "tracé d'un cercle de centre (x,y) et de rayon r"
        can.create_oval(x-r, y-r, x+r, y+r, outline=coul,fill='red')
    def effacecercle (x,y,r,coul='white'):
        can.create_oval(x-r, y-r, x+r, y+r, outline='white',fill='white')
    def figure_1():
        global X, Y,h,L, Xp,Yp, LaxeY, LaxeX,pY,pX,entr1 #X,Y coordonnées absolues dans can
     
        x = 50
        # Effacer d'abord tout dessin préexistant :
        #can.delete(ALL)????????????????????????????????????????????????
        #création des axes
        #tracé axe des abscisses
        can.create_line(70,Hcan-50,70+LaxeX,Hcan-50,width=1,fill='red')
        #tracé axe des ordonnées
        can.create_line(70,50,70,50+LaxeY,width=1,fill='red')
        #création des graduations
        #graduations abscisses
        can.create_line(70+pX,50+LaxeY,70+pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+2*pX,50+LaxeY,70+2*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+3*pX,50+LaxeY,70+3*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+4*pX,50+LaxeY,70+4*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+5*pX,50+LaxeY,70+5*pX,50+LaxeY+13,width=1,fill='red')
        can.create_line(70+6*pX,50+LaxeY,70+6*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+7*pX,50+LaxeY,70+7*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+8*pX,50+LaxeY,70+8*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+9*pX,50+LaxeY,70+9*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+10*pX,50+LaxeY,70+10*pX,50+LaxeY+13,width=1,fill='red')
        # affichage type de coordonnées sur les axex
        #abscisses
        can.create_text(1250,770,text="L(m)")
        can.create_text(185,770,text="1")
        can.create_text(645,770,text="5")
        #ordonnées
        can.create_text(50,80,text="h(m)")
        can.create_text(50,650,text="1")
        can.create_text(50,250,text="5")
        #graduations ordonnées
        can.create_line(70,50+LaxeY-pY,70-10,50+LaxeY-pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-2*pY,70-10,50+LaxeY-2*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-3*pY,70-10,50+LaxeY-3*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-4*pY,70-10,50+LaxeY-4*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-5*pY,70-13,50+LaxeY-5*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-6*pY,70-10,50+LaxeY-6*pY,width=1,fill='red')
     
     
     
     
     
        #??????????????????????????????????????
        #?????????????????????????????????????
     
     
        #??????????????????????????????????????????????
        #tracé de la courbe
        #can.create_oval(100-10, 100-10, 100+10, 100+10, outline='green',fill='red')
        rayon=10
        #angd=60
        while L< 10:
            Xp, Yp = X, Y
            ang=pi*int(angd.get())/180
            effacecercle(X, Y, rayon)
            h= -0.5*9.81*L*L/(v0*v0*cos(ang)*cos(ang))+L*tan(ang)
            X=70+LaxeX*L/10
            Y=-LaxeY*h/6+50+LaxeY # en instance
            can.create_line(Xp, Yp, X, Y, fill ='black')
     
            cercle(X, Y, rayon)
            can.update()
            time.sleep(0.3)
     
            L +=0.1
     
    ##### Programme principal : ############
    # initialisation des coordonnées, des vitesses et du témoin d'animation :
    #70px=décalage vers la droite de l'axe des ordonnées
    L,flag ,Lcan, Hcan= 0,0,1400,800
    X=70
    Y = Hcan -50
    v0=10
    #Lcan=largeur du canevas Hcan= hauteur du canevas
    LaxeX=Lcan-250 #largeur axes des abscisses
    LaxeY=Hcan-100 #longueur axe des ordonnées
    pX = LaxeX/10 #pas de graduation x pour 10 intervalles
    pY = LaxeY/7 #pas de graduation y pour 10 intervalles
     
    h=0
    L=0
     
    def on_quit():
        global L
        L = 10
        fen.quit()
     
    fen = Tk()
    fen.title('Balistique')
    angd = StringVar()
    angd.set('45')
    can = Canvas(fen, width=Lcan, height=Hcan, bg='white')
    can.pack()
    Button(fen, text='Lancer', command=figure_1).pack(side=RIGHT, padx=10)
    txt1=Label(fen, text='angle de tir en degré')
    entr1=Entry(fen, textvariable=angd)
    txt1.place(x=100, y=100)
    entr1.place(x=150, y=150)
    fen.protocol("WM_DELETE_WINDOW", on_quit)
    fen.mainloop()
    @+
    Merci d'utiliser le forum pour les questions techniques.

  6. #6
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Pausekawa d avoir indenté le code.
    luciendorali : A quel niveau se situe reellement le probleme?

    Car pour ce qui est recuperer le contenu d une Entry...
    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
    # -*- coding: latin-1-*-
    try:
        from tkinter import *
    except:
        from Tkinter import *
    root = Tk()
    txtvar = StringVar(root)
    txt = Entry(root, textvariable=txtvar)
    txt.pack()
    lbl = Label(root, text="Entry : ")
    lbl.pack()
     
    def test():
        msg = txtvar.get()
        print type(msg)
        lbl.config(text="Entry : " + msg)    
     
    Button(root, text="get", command=test).pack()
     
    root.mainloop()
    Par contre, il faudrait juste faire gaffe et ne pas oublier de convertir la valeur recue en int avant de vous en servir.
    Je vous propose de vous servir de preference d une Spinbox, pour ne pas avoir a faire de verifications avant la conversion en int.

    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
    # -*- coding: latin-1-*-
    try:
        from tkinter import *
    except:
        from Tkinter import *
    root = Tk()
    txtvar = StringVar(root)
    txt = Spinbox(root, textvariable=txtvar, from_=1, to=100, increment=1, state="readonly")
    txt.pack()
    lbl = Label(root, text="Entry : ")
    lbl.pack()
     
    def test():
        msg = txtvar.get()
        print type(msg)
        lbl.config(text="Entry : " + msg)    
     
    Button(root, text="get", command=test).pack()
     
    root.mainloop()
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  7. #7
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par afranck64 Voir le message
    Je vous propose de vous servir de preference d une Spinbox, pour ne pas avoir a faire de verifications avant la conversion en int.
    J'ai pas compris... C'est quoi la différence avec le code donné ?
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    Une Spinbox au lieu d une Entry
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  9. #9
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    C'est bien cela que je ne comprend pas:
    Que ce soit le .get() du Widget Spinbox ou un StringVar c'est toujours un str.
    Dans 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
    try:
        from tkinter import *
    except:
        from Tkinter import *
    root = Tk()
    txtvar = StringVar(root)
    txt = Spinbox(root, textvariable=txtvar, from_=1, to=100, increment=1, state="readonly")
    txt.pack()
    lbl = Label(root, text="Entry : ")
    lbl.pack()
     
    def test():
        msg = txtvar.get()
        print type(msg)
        lbl.config(text="Entry : " + msg)    
     
    Button(root, text="get", command=test).pack()
     
    root.mainloop()
    txt.get() ou txtvar.get() sont équivalents (textvariable=txtvar) donc inutiles.
    Merci d'utiliser le forum pour les questions techniques.

  10. #10
    Membre éprouvé
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Points : 1 006
    Points
    1 006
    Par défaut
    J ai en ecrivant le code pense qu il y avait des obligations d utilisation de variables sous Python 3.X (je ne m y suis pas encore mis alors ayant vu votre post)
    Il manque sans doute de la communication entre le Widget Entry et le code, non ? (textvariable/StringVar())

    Je suppose que cette version est plus digeste.

    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
    # -*- coding: latin-1-*-
    try:
        from tkinter import *
    except:
        from Tkinter import *
    root = Tk()
    intvar =IntVar(root)
    txt = Spinbox(root, textvariable=intvar, from_=1, to=100, increment=1, state="readonly")
    txt.pack()
    lbl = Label(root, text="Entry : ")
    lbl.pack()
     
    def test():
        msg = intvar.get()
        print type(msg)
        lbl.config(text="Entry : " + str(msg))    
     
    Button(root, text="get", command=test).pack()
     
    root.mainloop()
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

  11. #11
    Expert confirmé 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
    Points : 4 005
    Points
    4 005
    Par défaut
    l'utilisation d'un Spinbox en readonly et de IntVar permets en effet d'éviter toute erreur.
    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
    from tkinter import *
    import time
    from math import cos, tan, pi
     
    def cercle(x, y, r, coul='black'):
        "tracé d'un cercle de centre (x,y) et de rayon r"
        can.create_oval(x-r, y-r, x+r, y+r, outline=coul,fill='red')
    def effacecercle (x,y,r,coul='white'):
        can.create_oval(x-r, y-r, x+r, y+r, outline='white',fill='white')
    def figure_1():
        global X, Y,h,L, Xp,Yp, LaxeY, LaxeX,pY,pX,entr1 #X,Y coordonnées absolues dans can
     
        x = 50
        # Effacer d'abord tout dessin préexistant :
        #can.delete(ALL)????????????????????????????????????????????????
        #création des axes
        #tracé axe des abscisses
        can.create_line(70,Hcan-50,70+LaxeX,Hcan-50,width=1,fill='red')
        #tracé axe des ordonnées
        can.create_line(70,50,70,50+LaxeY,width=1,fill='red')
        #création des graduations
        #graduations abscisses
        can.create_line(70+pX,50+LaxeY,70+pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+2*pX,50+LaxeY,70+2*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+3*pX,50+LaxeY,70+3*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+4*pX,50+LaxeY,70+4*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+5*pX,50+LaxeY,70+5*pX,50+LaxeY+13,width=1,fill='red')
        can.create_line(70+6*pX,50+LaxeY,70+6*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+7*pX,50+LaxeY,70+7*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+8*pX,50+LaxeY,70+8*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+9*pX,50+LaxeY,70+9*pX,50+LaxeY+10,width=1,fill='red')
        can.create_line(70+10*pX,50+LaxeY,70+10*pX,50+LaxeY+13,width=1,fill='red')
        # affichage type de coordonnées sur les axex
        #abscisses
        can.create_text(1250,770,text="L(m)")
        can.create_text(185,770,text="1")
        can.create_text(645,770,text="5")
        #ordonnées
        can.create_text(50,80,text="h(m)")
        can.create_text(50,650,text="1")
        can.create_text(50,250,text="5")
        #graduations ordonnées
        can.create_line(70,50+LaxeY-pY,70-10,50+LaxeY-pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-2*pY,70-10,50+LaxeY-2*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-3*pY,70-10,50+LaxeY-3*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-4*pY,70-10,50+LaxeY-4*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-5*pY,70-13,50+LaxeY-5*pY,width=1,fill='red')
        can.create_line(70,50+LaxeY-6*pY,70-10,50+LaxeY-6*pY,width=1,fill='red')
     
     
     
     
     
        #??????????????????????????????????????
        #?????????????????????????????????????
     
     
        #??????????????????????????????????????????????
        #tracé de la courbe
        #can.create_oval(100-10, 100-10, 100+10, 100+10, outline='green',fill='red')
        rayon=10
        #angd=60
        while L< 10:
            Xp, Yp = X, Y
            ang=pi*angd.get()/180
            effacecercle(X, Y, rayon)
            h= -0.5*9.81*L*L/(v0*v0*cos(ang)*cos(ang))+L*tan(ang)
            X=70+LaxeX*L/10
            Y=-LaxeY*h/6+50+LaxeY # en instance
            can.create_line(Xp, Yp, X, Y, fill ='black')
     
            cercle(X, Y, rayon)
            can.update()
            time.sleep(0.3)
     
            L +=0.1
     
    ##### Programme principal : ############
    # initialisation des coordonnées, des vitesses et du témoin d'animation :
    #70px=décalage vers la droite de l'axe des ordonnées
    L,flag ,Lcan, Hcan= 0,0,1400,800
    X=70
    Y = Hcan -50
    v0=10
    #Lcan=largeur du canevas Hcan= hauteur du canevas
    LaxeX=Lcan-250 #largeur axes des abscisses
    LaxeY=Hcan-100 #longueur axe des ordonnées
    pX = LaxeX/10 #pas de graduation x pour 10 intervalles
    pY = LaxeY/7 #pas de graduation y pour 10 intervalles
     
    h=0
    L=0
     
    def on_quit():
        global L
        L = 10
        fen.quit()
     
    fen = Tk()
    fen.title('Balistique')
    angd = IntVar()
    angd.set(45)
    can = Canvas(fen, width=Lcan, height=Hcan, bg='white')
    can.pack()
    Button(fen, text='Lancer', command=figure_1).pack(side=RIGHT, padx=10)
    txt1 = Label(fen, text='angle de tir en degré')
    entr1 = Spinbox(fen, textvariable=angd, from_=0, to=360, increment=1, state="readonly")
    txt1.place(x=100, y=100)
    entr1.place(x=150, y=150)
    fen.protocol("WM_DELETE_WINDOW", on_quit)
    fen.mainloop()
    Après c'est au choix.
    Merci d'utiliser le forum pour les questions techniques.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut utilisation de la fonction get pour des graphiques
    Bonjour et un grand merci pour les renseignements et corrections apportés par Mrs PauseKawa et Afranck64
    Il me reste à peaufiner la mise en page.

Discussions similaires

  1. utiliser une fonction VOID pour des blocs relationnels ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 11/09/2006, 16h16
  2. Réponses: 8
    Dernier message: 29/06/2006, 15h37
  3. Réponses: 1
    Dernier message: 09/05/2006, 20h01
  4. VB6 - Quels outils pour des graphiques sympathiques
    Par CBleu dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 11/01/2006, 22h31
  5. [VB6] utilisation de Property LET / GET pour un tableau
    Par titounne dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 18/10/2004, 22h06

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