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







Répondre avec citation
Partager