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 :

Animation dans un canevas


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Animation dans un canevas
    Bonjour
    Je débute avec Python et Tkinter, je suis le cours "apprendre à programmer avec python" de Gerard Swinnen (très bon cours libre)
    À la page 102, il y a un programme qui affiche un rond se déplaçant dans un canevas:
    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
    from Tkinter import *
    # procédure générale de déplacement :
    def avance(gd, hb):
        global x1, y1
        x1, y1 = x1 +gd, y1 +hb
        can1.coords(oval1, x1, y1, x1+30, y1+30)
    # gestionnaires d'événements :
    def depl_gauche():
        avance(-10, 0)
    def depl_droite():
        avance(10, 0)
    def depl_haut():
        avance(0, -10)
    def depl_bas():
        avance(0, 10)
    #------ Programme principal -------
    # les variables suivantes seront utilisées de manière globale :
    x1, y1 = 10, 10        # coordonnées initiales
    # Création du widget principal ("maître") :
    fen1 = Tk()
    fen1.title("Exercice d'animation avec Tkinter")
    # création des widgets "esclaves" :
    can1 = Canvas(fen1,bg='dark grey',height=300,width=300)
    oval1 = can1.create_oval(x1,y1,x1+30,y1+30,width=2,fill='red')
    can1.pack(side=LEFT)
    Button(fen1,text='Quitter',command=fen1.quit).pack(side=BOTTOM)
    Button(fen1,text='Gauche',command=depl_gauche).pack()
    Button(fen1,text='Droite',command=depl_droite).pack()
    Button(fen1,text='Haut',command=depl_haut).pack()
    Button(fen1,text='Bas',command=depl_bas).pack()
    # démarrage du réceptionnaire d'évènements (boucle principale) :
    fen1.mainloop()
    Je m'en suis inspiré pour réaliser un programme qui fait se déplacer une tortue à l'endroit où l'on clique dans un canevas:
    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
    # -*- coding: Utf-8 -*-
    from Tkinter import *
     
    def move(abscisse):
      global origine
      print origine
      if origine<abscisse :
        origine+=1
        can1.coords(sprite,origine, 14)
      else :
        origine-=1
        can1.coords(sprite,origine, 14)
     
    def deplacer(event):
      global origine
      while origine!= event.x :
        fen1.after(10,move(event.x))
     
     
    fen1=Tk()
     
    #creation du canevas et des images
    origine=9
    can1 = Canvas(fen1, width=640, height=30)
    photo1=PhotoImage(file='/home/kimented/python/1.gif')
    sprite=can1.create_image(9,14, image=photo1)
    can1.grid(row=0, column=0)
    can1.bind("<Button-1>", deplacer)
     
    #demarrage
    fen1.mainloop()
    Le problème que j'ai, c'est que la tortue n'apparait qu'à la position d'orrigine, puis à la position d'arrivée. Cependant on peut vérifier dans la console que les différentes positions intermédiaires de la tortue apparaissent au rytme de la boucle.
    J'ai testé le programme de l'exemple, il fonctionne. Je ne sais pas pourquoi le mien ne marche pas comme je le voudrais.



    help me please

  2. #2
    Membre confirmé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 407
    Points : 627
    Points
    627
    Par défaut
    il faut rajouter un update après le coords :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      can1.coords(sprite,origine, 14)
      can1.update()

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci ça marche

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/09/2003, 20h12
  2. 1 SOLUTION : plusieurs anim dans un fichier x
    Par heidi79 dans le forum DirectX
    Réponses: 1
    Dernier message: 28/08/2003, 10h19
  3. Plusieurs animations dans un fichier .X
    Par heidi79 dans le forum DirectX
    Réponses: 6
    Dernier message: 25/08/2003, 03h26
  4. Texte dans un canevas
    Par Bernard M dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2002, 18h56

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