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:
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
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()
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.
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()
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
Partager