Bienvenue sur IndexError.

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

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

self.canvas.bind_all('<KeyPress-Left>', self.vers_gauche) AttributeError: 'Raquette' object has no attribute vers_gauche

0 votes

Voici le programme:

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.largeur_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

class Raquette:
    def __init__(self , canvas , couleur):
        self.canvas=canvas
        self.id=canvas.create_rectangle(0,0,100,10,fill=couleur)
        self.canvas.move(self.id,200,300)
        self.x=0
        self.largeur_canevas=self.canvas.winfo_width()
        self.canvas.bind_all('<KeyPress-Left>', self.vers_gauche)
        self.canvas.bind_all('<KeyPress-Right>', self.vers_droite)

        def vers_gauche(self , evt):
             self.x=-2

        def vers_droite(self, evt):
             self.x = 2
        def dessiner(self):
            self.canvas.move(self.id, self.x, 0)
            pos= self.canvas.coords(self.id)
            if pos[0]<=0:
                self.x = 0
            elif pos[2]>=self.largeur_canevas:
                self.x = 0



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()

Raquette= Raquette(canvas,'blue')
balle = Balle(canvas,'red')

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

1 Réponse

+2 votes

Le code que tu as posté est mal indenter : les fonctions vers_gauche(), vers_droite() et dessiner() doivent reculer d'un cran (-4 espaces).

répondu 11-Jul-2016 par bubulle (2,256 points)
...