Tkinter, non déplacement d'un ballon incompréhensible

ubranov Messages postés 2 Date d'inscription lundi 29 mars 2010 Statut Membre Dernière intervention 8 août 2010 - 8 août 2010 à 23:21
ubranov Messages postés 2 Date d'inscription lundi 29 mars 2010 Statut Membre Dernière intervention 8 août 2010 - 8 août 2010 à 23:45
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.

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("", commencer)
boutton.pack()


fenetre.mainloop()

A voir également:

1 réponse

ubranov Messages postés 2 Date d'inscription lundi 29 mars 2010 Statut Membre Dernière intervention 8 août 2010
8 août 2010 à 23:45
C'est tout bon en fait !
supprimer : self.forme à la ligne 17...
0
Rejoignez-nous