j'ai un problème avec mon programme qui est un jeu (le serpent qui doit attrapper des pommes).
je n'en suis qu'au début, je doit le faire avancer le serpent et le faire changer de direction à chaque événement sur le pavé numérique (touche 4,2,6,8). j'utilise la méthode .bind

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
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# -*- coding: cp1252 -*-
from Tkinter import *
 
def avance_gauche(event):
    flag =5
    mouvement()
 
def gauche ():
    global x1, y1, vx, vy, flag, rut
    rut = 0
    can1.coords(oval1, x1, y1, x1+30, y1+30)
    verif.configure(text ='ça marche capitaine!!')
    vx = -10
    vy = 0
    x1= x1 + vx
    y1 = y1 + vy
    if flag == 5:
        fen1.after(100, avance_gauche)
 
def avance_droit (event):
    flag = 4
    mouvement ()
 
 
def droit ():
    global x1, y1, vx, vy, flag, rut
    rut = 0
    verif.configure(text ='ça marche capitaine!!')
    can1.coords(oval1, x1, y1, x1+30, y1+30)
    vx = 10
    vy = 0
    x1= x1 + vx
    y1 = y1 + vy
    if flag == 4:
        fen1.after(100, avance_droit)
 
def avance_haut(event):
    flag = 3
    haut()
 
def haut ():
    global x1, y1, vx, vy, flag, rut
    rut = 0
    verif.configure(text ='ça marche capitaine!!')
    can1.coords(oval1, x1, y1, x1+30, y1+30)
    vx = 0
    vy = -10
    x1= x1 + vx
    y1 = y1 + vy
    if flag == 3:
        fen1.after(100, avance_haut)
 
 
def avance_bas(event):
    bas()
 
def bas():
    global x1, y1, vx, vy, flag, rut
    rut = 0
    flag = 2
    verif.configure(text ='ça marche capitaine!!')
    can1.coords(oval1, x1, y1, x1+30, y1+30)
    vx = 0
    vy = 10
    x1= x1 + vx
    y1 = y1 + vy
    if flag == 2:
        fen1.after(100, avance_bas)
 
def jouer():
    global x1, y1, vx, vy, rut
    rut = 1
    can1.coords(oval1, x1, y1, x1+30, y1+30)
    vx = 10
    vy = 0
    x1= x1 + vx
    y1 = y1 + vy
    if rut == 1:
        fen1.after(100, jouer)
 
def mouvement():
    if flag ==2:
        gauche()
    if flag == 3:
        bas()
    if flag ==4:
        droit()
    if flag ==5:
        gauche()
 
 
 
 
x1 = 20
y1 = 20
vx = 10
vy = 0
flag = 0
fen1 = Tk()
can1 = Canvas (fen1, bg ='white', width = 800, height = 800)
can1.pack(side = LEFT)
oval1 = can1.create_oval(x1, y1, x1+30, y1+30, width = 2, fill ='red')
fen1.bind('4', avance_gauche)
fen1.bind('6', avance_droit)
fen1.bind('8', avance_haut)
fen1.bind('2', avance_bas)
verif = Label(fen1, text =' ' )
verif.pack(side = LEFT)
bout1 = Button(text = 'Quitter', command = fen1.destroy)
bout1.pack(side = RIGHT)
bout2 = Button(text = 'Jouer',  command = jouer)
bout2.pack(side = RIGHT)
 
fen1.mainloop()
j'ai comme erreur
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__
return self.func(*args)
File "C:\Python25\lib\lib-tk\Tkinter.py", line 498, in callit
func(*args)
TypeError: avance_bas() takes exactly 1 argument (0 given)

je ne comprend pas, l'argument est bien appellé puisque event sert d'argument

merci d'avance