Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

erreur:if pos[2]>=self.largeur_canevas: AttributeError: 'Balle' object has no attribute 'largeur_canevas'

0 votes

Voici le code en entier:

from tkinter import *
import random
import time

class Balle:
     def __init__(self, canvas, couleur):
         self.canvas = canvas
         self.id = canvas.create_oval(10,10,25,25, fill=couleur)
         self.canvas.move(self.id, 245, 100)
         departs=[-3,-2,-1,1,2,3]
         random.shuffle(departs)
         self.x=departs[0]
         self.y=-3
         self.hauteur_canevas=self.canvas.winfo_height()
         self.hauteur_canevas=self.canvas.winfo_width()


     def dessiner(self):
         self.canvas.move(self.id,self.x,self.y)
         pos=self.canvas.coords(self.id)
         if pos[1]<=0:
            self.y=3
         if pos[3]>=self.hauteur_canevas:
            self.y= -3
         if pos[0]<=0:
             self.x=3
         if pos[2]>=self.largeur_canevas:
             self.x=-3


tk=Tk()
tk.title("Jeu")
tk.resizable(0, 0)
tk.wm_attributes("-topmost", 1)
canvas = Canvas(tk, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack()
tk.update()


balle = Balle(canvas,'red')

while 1:
    balle.dessiner()
    tk.update_idletasks()
    tk.update()
    time.sleep(0.01)
demandé 8-Jul-2016 par anonyme
edité 8-Jul-2016 par max

Le message d'erreur te dit: l'objet 'balle' n'a pas d'attribut largeurcanevas. Cherche d'ou vient ton attribut self.largeurcanevas. Et la tu vas te rendre compte que tu as fait une étourderie.

2 Réponses

0 votes
 
Meilleure réponse

Dans ta classe Balle, tu as défini 2 fois self.hauteurcanvas au lieu de self.largeurcanvas

répondu 8-Jul-2016 par benjamin (394 points)
0 votes

Essaye de remplacer
self.hauteur_canevas=self.canvas.winfo_width()
Par
self.largeur_canevas=self.canvas.winfo_width()

répondu 9-Jul-2016 par anonyme
...