Bonjour,

Considérez ce code:
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
 def resolution(self,etape):
        #procédure récursive
 
 
        "déplacement de la balle"
        global x1,y1,dx,dy,flag
        self.x1,self.y1=self.x1+self.dx,self.y1+self.dy
        if self.x1>210:
            self.x1,self.dx,self.dy=210,0,15
        if self.y1>210:
            self.y1,self.dx,self.dy=210,-15,0
        if self.x1<10:
            self.x1,self.dx,self.dy=10,0,-15
        if self.y1<10:
            self.y1,self.dx,self.dy=10,15,0
        self.gra.coords(self.oval1,self.x1,self.y1,self.x1+30,self.y1+30)
 
        self.fen.after(50,self.resolution(1))
 
        print 'la balle a bougé'
Le morceau de code placé ici n'a pas grande signification, il n'est qu'un problème que j'ai isolé dans un code plus gros.

Quand on lance la fonction self.resolution(1), très vite, j'ai un message d'erreur à rallonge:

Exception in Tkinter callback
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk/Tkinter.py", line 1403, in __call__
File "main2.py", line 88, in demarrage
self.resolution(1)
File "main2.py", line 146, in resolution
self.fen.after(50,self.resolution(1))
File "main2.py", line 146, in resolution
self.fen.after(50,self.resolution(1))
File "main2.py", line 146, in resolution

........
File "main2.py", line 146, in resolution
self.fen.after(50,self.resolution(1))
File "main2.py", line 146, in resolution
self.fen.after(50,self.resolution(1))
File "main2.py", line 146, in resolution
self.fen.after(50,self.resolution(1))
File "main2.py", line 146, in resolution
self.fen.after(50,self.resolution(1))
File "main2.py", line 146, in resolution
self.fen.after(50,self.resolution(1))
File "main2.py", line 146, in resolution
self.fen.after(50,self.resolution(1))
File "main2.py", line 144, in resolution
self.gra.coords(self.oval1,self.x1,self.y1,self.x1+30,self.y1+30)
RuntimeError: maximum recursion depth exceeded


Mais quand j'enlève l'argument etape à la fonction, c'est à dire que j'ai déclare

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
 def resolution(self):
        #procédure récursive
 
 
        "déplacement de la balle"
        global x1,y1,dx,dy,flag
        self.x1,self.y1=self.x1+self.dx,self.y1+self.dy
        if self.x1>210:
            self.x1,self.dx,self.dy=210,0,15
        if self.y1>210:
            self.y1,self.dx,self.dy=210,-15,0
        if self.x1<10:
            self.x1,self.dx,self.dy=10,0,-15
        if self.y1<10:
            self.y1,self.dx,self.dy=10,15,0
        self.gra.coords(self.oval1,self.x1,self.y1,self.x1+30,self.y1+30)
 
        self.fen.after(50,self.resolution)
 
        print 'la balle a bougé'
en l'appelant avec self.resolution(), cette fois, plus de problème, je vois bien ma petite balle se déplacer à l'écran.
Faut-il croire que la fonction passée en argument de la fonction after ne doit pas avoir d'argument?


Mathieu