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