Bonjour a tous,

J'ai une erreur sur le code d'un jeu de pong avec Tkinter au niveau de ma détection d'évènement, mon code me semble correct au vu de ce que je vois dans certaine documentation et tuto.
J'ai fait également quelques essais pour corriger le problème, mais je ne trouve pas. Le code fonction, mais cette erreur est généré dans la console.

L'erreur qui apparait dans la console, quand je déplace ma souris au dessus du canvas est:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\treza\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:\Users\treza\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 839, in callit
    func(*args)
TypeError: survol() missing 1 required positional argument: 'event'
Et mon code est le suivant:

Code Python : 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from tkinter import *
from random import randrange
 
 
SIDE = 600
niv = 0
dx = 4
dy = 5
dx2 = 5
dy2 = 0
 
root = Tk()
cnv = Canvas(root, width=SIDE, height=SIDE)
cnv.pack()
 
 
def deplacement():
    global dx, dy, dx2, dy2, SIDE, plafond, niv
# changement de direction eau bord du canvas
    if cnv.coords(balle)[3] > SIDE:
        dy = -dy
    elif cnv.coords(balle)[1] < 10:
        dy = abs(dy)
    if cnv.coords(balle)[0] > SIDE-20:
        dx = -dx
    elif cnv.coords(balle)[2] < 30:
        dx = abs(dx)
# détection de la raquette
    if len(cnv.find_overlapping(cnv.coords(raquette)[0], cnv.coords(raquette)[1], cnv.coords(raquette)[2], cnv.coords(raquette)[3])) > 1:
        dy = -dy
# Arret du script en fonction de la hauteur du plafond
    if niv >= 500:
        cnv.move(balle, 0, 0)
    else:
        cnv.move(balle, dx, dy)
# gestion de la vitesse de déplacement
    cnv.after(5, deplacement)
# descente du plafond si on loupe la balle
    if cnv.coords(balle)[3] == SIDE+5:
        # print(cnv.coords(balle)[3])
        niv += 100
        cnv.delete(plafond)
        plafond = cnv.create_rectangle(
            0, niv-5, SIDE, niv, outline="black", fill="red")
# detection colision plafond
    if len(cnv.find_overlapping(cnv.coords(plafond)[0], cnv.coords(plafond)[1], cnv.coords(plafond)[2], cnv.coords(plafond)[3])) > 1:
        dy = abs(dy)
# mouvement raquette en fonction de souris
 
 
def survol(event):
    global X, dy2, raquette
    X = event.x
    Y = event.y
    if X < 25:
        X = 25
    elif X > SIDE-25:
        X = SIDE-25
    # on dessine la raquette avec un deplacement gauche droite uniquement
    cnv.move(raquette, X, dy2)
    cnv.delete(raquette)
    raquette = cnv.create_rectangle(
        X-25, SIDE-25, X+25, SIDE-30, outline="black", fill="green")
    cnv.after(20, survol)
 
 
# On dessine le plafond
plafond = cnv.create_rectangle(
    0, 0, SIDE, 5, outline="black", fill="red")
 
 
balle = cnv.create_oval(SIDE/2-30, SIDE/2-10, SIDE /
                        2-10, SIDE/2+10, fill="orange")
raquette = cnv.create_rectangle(
    SIDE/2-25, SIDE-25, SIDE/2+25, SIDE-30, fill="black")
# Detection de la souris au survol du canvas
cnv.bind("<Motion>", survol)
# Appel de la fonction deplacement
deplacement()
 
root.update()
 
root.mainloop()

Cela doit ne doit certainement pas être compliqué mais je ne trouve pas !!
Pauvre est mon savoir.