Bonjour,
Considérez ce code:
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.
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é'
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
en l'appelant avec self.resolution(), cette fois, plus de problème, je vois bien ma petite balle se déplacer à l'écran.
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é'
Faut-il croire que la fonction passée en argument de la fonction after ne doit pas avoir d'argument?
Mathieu








Répondre avec citation
Partager