Bonjour,
Je cherche simplement à animer un petit ballon dans une fenêtre grâce au module Tkinter. Je n'arrive vraiment pas à comprendre en quoi le code ci-dessous ne fonctionne pas comme souhaité. En effet, par la méthode 'bouge' les coordonnées graphique du ballon ne changent pas malgré que ses attributs 'position_xy' sont eux bien modifiés. (et malgré avoir aussi essayer la méthode 'update'). D'autant plus surprenant qu'en rentrant 'en dur' des coordonnées bidon comme arguments de la méthode 'coords', le ballon s'affiche bien à cette position bidon.
J'en déduis que le hic n'est ni dans l'utilisation de la méthode 'coords' ni dans les valeurs passées en arguments. Alors d'où peut diable venir ce non déplacement du ballon, pourquoi ? et comment y remédier ?
Merci d'avance pour vos réponses !!! (je souhaite éviter les 'global' et utiliser la notion de classe dans mon code)
E.
Code Python :
from Tkinter import *
class Ball:
def __init__(self, position_x, position_y, deplacement_x, deplacement_y):
self.position_x = position_x
self.position_y = position_y
self.deplacement_x = deplacement_x
self.deplacement_y = deplacement_y
self.forme = canevas.create_oval(position_x-10, position_y-10, position_x+10, position_y+10, width = 2, fill = 'red')
def bouge(self):
self.position_x = self.position_x + self.deplacement_x
self.position_y = self.position_y + self.deplacement_y
print(self.position_x-10, self.position_y-10, self.position_x+10, self.position_y+10)
# pourquoi diable le ballon ne se deplace pas alors que les coordonnes sont bien modifiees ????!!!!
# self.forme = canevas.coords(self.forme, 100, 100, 100, 100) # alors que de rentrer les coordonnees en dur fonctionne...?
self.forme = canevas.coords(self.forme, self.position_x-10, self.position_y-10, self.position_x+10, self.position_y+10)
canevas.after(50,self.bouge)
def commencer(event):
ballon = Ball(200,200 , 3,3)
ballon.bouge()
fenetre = Tk()
canevas = Canvas(fenetre, height = 500, width = 500)
canevas.pack()
boutton = Button(fenetre, text = "GO !")
boutton.bind("<Button-1>", commencer)
boutton.pack()
fenetre.mainloop()