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 :

ralentissement à chaque tracé d'une courbe


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 12
    Points
    12
    Par défaut ralentissement à chaque tracé d'une courbe
    Bonjour Tout l'monde
    j'ai fait un petit programme (en python) qui trace deux graphes en parallèle avec un bouton démarrer...
    Chaque fois que je rappuie sur démarrer, le tracé des graphes est toujours plus lent.
    (c'est les graphes de la vitesse en fonction du temps et de la position en fonction du temps d'un chariot sur un plan incliné).
    (je ne sais pas non plus comment insérer mon code ici)
    merci de votre compassion!

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 55
    Points : 66
    Points
    66
    Par défaut
    Salut, tout d'abord, qu'utilises-tu comme librairie graphique?

    Je vais supposer que c'est Tkinter....
    Le coup classique dans les "animations" faites avec Tkinter, c'est qu'à chaque 'point' de l'animation on dessine un nouvel item (en l'occurence un segment dans ton cas)..... Et on oublie de supprimer les instances des segments précédents... On demande donc à python d'instancier plusieurs centaines d'objet "segment", et à Tkinter de gérer tout ca... C'est un peu rude.

    Je te conseille de regarder la doc de Tkinter concernant les Canvas, pour qui quand tu instancies un objet graphique dont il est le conteneur, retourne une référence de l'objet créé que tu pourras stocker quelque part afin de l'effacer au bon moment. Je mets en copie un des premiers codes que j'ai fait pour apprendre Tkinter. C'est pas nickel du tout, mais tu verras peut-être comment ca marche.

    Tout ca, en espérant que tu ais bien utilisé Tkinter

    Pour insérer du code dans le forum, il y a le bouton (#) qui insère automatiquement des balises pour le code, et il ne te reste plus qu'à copier coller ton code à l'intérieur.

    A++

    JC

    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
    from Tkinter import *
    from random import randrange
     
    duration=25
    mes_couleurs=['blue','red','grey','purple','cyan','maroon','green','orange','yellow']
    couleur='blue'
    displayed=[]
     
    def bye():
        root.quit()
        root.destroy()
     
    def depl():
        global duration
        global couleur
        global displayed
     
        #Effacement triangle precedent
        for i in range(len(displayed)):
            graph.delete(displayed[i])
        displayed=[]
     
        #Deplacement des points
        p1.move()
        p2.move()
        p3.move()
        p4.move()
     
        #Gestion couleur alleatoire
        duration=duration+1
        if duration >= 25:
            c=randrange(9)
            couleur=mes_couleurs[c]
            duration=0
     
        #Affichage triangle
        displayed.append(graph.create_line(p1.o_x,p1.o_y,p2.o_x,p2.o_y,fill=couleur))
        displayed.append(graph.create_line(p2.o_x,p2.o_y,p3.o_x,p3.o_y,fill=couleur))
        displayed.append(graph.create_line(p3.o_x,p3.o_y,p1.o_x,p1.o_y,fill=couleur))
        displayed.append(graph.create_line(p1.o_x,p1.o_y,p4.o_x,p4.o_y,fill=couleur))
        displayed.append(graph.create_line(p2.o_x,p2.o_y,p4.o_x,p4.o_y,fill=couleur))
        displayed.append(graph.create_line(p3.o_x,p3.o_y,p4.o_x,p4.o_y,fill=couleur))   
     
        #Gestion boucle infinie
        root.after(50,depl)
     
    class point:
        o_x=0
        o_y=0
        e_x=0
        e_y=0
        speed_x=0
        speed_y=0
     
        def __init__(self):
            self.o_x=randrange(0,600)
            self.o_y=randrange(0,600)
            self.e_x=randrange(0,600)
            self.e_y=randrange(0,600)
            self.speed_x=randrange(5,10)
            self.speed_y=randrange(5,10)
     
        def affic(self):
            print "(",self.o_x,",",self.e_x,")"
            print "(",self.o_y,",",self.e_y,")"
            print ""
     
        def move(self):
            if (self.o_x >= 600) or (self.o_x <= 0):
                self.e_x = 2*self.o_x - self.e_x
            if (self.o_y >= 600) or (self.o_y <= 0):
                self.e_y = 2*self.o_y - self.e_y
     
            temp=self.o_x
            self.o_x=self.o_x+0.005*self.speed_x*(self.e_x-self.o_x)
            self.e_x=self.e_x+(self.o_x-temp)
     
            temp=self.o_y
            self.o_y=self.o_y+0.005*self.speed_y*(self.e_y-self.o_y)
            self.e_y=self.e_y+(self.o_y-temp)
     
    #Main
    p1=point()
    p2=point()
    p3=point()
    p4=point()
     
    #Interface graphique
    root=Tk()
    root.title("Economiseur d\'ecran")
    root.resizable(width=0,height=0)
    root.protocol("WM_DELETE_WINDOW", bye)
    graph=Canvas(root,width=600,height=600,bg='white')
    graph.grid(row=0,column=0)
    but=Button(root,text="Quit",command=bye)
    but.grid(row=1,column=0)
    depl()
    root.mainloop()

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    merci!
    Oui j'utilise Tkinter et en fait j'avais mis mes coordonnées dans une liste que j'efface au moment voulu mais pas les segment...

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

Discussions similaires

  1. [Google Charts]Tracé d'une courbe avec y<0
    Par Mopige dans le forum APIs Google
    Réponses: 2
    Dernier message: 30/06/2013, 10h40
  2. tracé d'une courbe
    Par lolamila dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/12/2010, 17h37
  3. [Débutant] Tracé d'une courbe en 3D
    Par louftansa dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/06/2008, 13h37
  4. VB6 , tracé d'une courbe
    Par a_adiss dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/11/2006, 20h22
  5. optimiser le tracé d'une courbe
    Par Zorgz dans le forum 2D
    Réponses: 3
    Dernier message: 04/09/2006, 16h17

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