En reprenant le programme ci-dessus, j’ai voulu placer le nombre de billes N en paramètre pouvant être modifié par l’utilisateur ( bouton Entry). Ca marche, sauf que lorsque l’utilisateur change la valeur de N, on obtient un message d’erreur :
*Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/init.py", line 1699, in __call_
return self.func(*args)
File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/init.py", line 745, in callit
func(*args)
File "/Users/foccus/Desktop/Python/Code2/tes1.py", line 13, in deplace
self.x=canvas.coords(balle[self.i])[2]
IndexError: list index out of range_
*
Le programme :
canvas.delete(ALL)
EN=entree_N.get()
N=int(EN)
cx,cy,tdx,tdy,balle=[1]*N,[1]*N,[1]*N,[1]*N,[1]*N
for l in range(N):
cx[l],cy[l]=randint(30,420),randint(30,250)
tdx[l],tdy[l]=4,4
for i in range(N):
balle[i]=canvas.create_oval(cx[i],cy[i],cx[i]+15,cy[i]+15,fill='white',outline='black')
for i in range(N):
p=bille()
p.i=i
p.x=cx[i]
p.y=cy[i]
p.dx=tdx[i]
p.dy=tdy[i]
p.deplace(balle)
# Encore un problème : Carbage collector me joue des tours
Posté par foccus . En réponse au message Mon programme ne fonctionne pas comme je veux. Évalué à -1.
En reprenant le programme ci-dessus, j’ai voulu placer le nombre de billes N en paramètre pouvant être modifié par l’utilisateur ( bouton Entry). Ca marche, sauf que lorsque l’utilisateur change la valeur de N, on obtient un message d’erreur :
*Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/init.py", line 1699, in __call_
return self.func(*args)
File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/init.py", line 745, in callit
func(*args)
File "/Users/foccus/Desktop/Python/Code2/tes1.py", line 13, in deplace
self.x=canvas.coords(balle[self.i])[2]
IndexError: list index out of range_
*
Le programme :
``from tkinter import *
from random import *
class bille:
def init(self):
self.i=0
self.x=0
self.y=0
self.dx=0
self.dy=0
def deplace(self,balle):
canvas.move(balle[self.i],self.dx,self.dy)
self.x=canvas.coords(balle[self.i])[2]
self.y=canvas.coords(balle[self.i])[3]
bille.mur(self)
tk.after(20,bille.deplace,self,balle)
def demarrer():def mur(self):
if not(20 < self.y < 310):
self.dy=(-1)*self.dy
if not(20 < self.x < 470):
self.dx=(-1)*self.dx
Programme Principal
tk=Tk()
canvas=Canvas(tk,width = 480, height = 320 , bd=0, bg="yellow")
canvas.pack()
Creation d'un bouton "Démarrer"
Boutton_Demarrer=Button(tk,text="Démarrer",command=demarrer)
Boutton_Demarrer.pack(side=LEFT)
Creation d'un bouton "Detruire":
Bouton_Detruire=Button(tk, text ='Quitter', command = tk.destroy)
Ajouter l'affichage du bouton dans la fenêtre tk:
Bouton_Detruire.pack(side=RIGHT)
Nombre de balles N
entree_N=Entry(tk,width=3)
entree_N.pack()
Boucle principale:
tk.mainloop()`
`
[^] # Re: Erreur d'indice ?
Posté par foccus . En réponse au message Mon programme ne fonctionne pas comme je veux. Évalué à 2.
Merci !
[^] # Re: Boucle infinie
Posté par foccus . En réponse au message Mon programme ne fonctionne pas comme je veux. Évalué à 3.
Pourtant ça fonctionne avec une seule bille. Il y a l'instruction tk.after qui rappelle la fonction deplace toutes les 20ms.