Bonsoir,

je me forme actuellement à Python à l'aide du livre de Gérard Swinnen (O'reilly), et je bloque sur un exercice (8.12 page 100).

Voici mon source :

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
 
# -*- coding:Utf-8 -*-
 
#####################
# Script python 2.4 #
# Formation         #
#####################
 
 
 
from Tkinter import *
 
def deplacement(gd, hd, indice):
    "Fonction globale pour le déplacement"
    if(indice == 1):
	global x1, y1
	x1, y1 = x1+gd, y1+hd
	can.coords(astre1, x1, y1, x1+10, y1+10)
    else:
	global x2, y2
	x2, y2 = x2+gd, y2+hd
	can.coords(astre2, x2, y2, x2+10, y2+10)
 
 
def depl_gauche(indice):
    "Déplacement d'un astre à gauche"
    deplacement(-10, 0, indice)
 
def depl_droite(indice):
    "Déplacement d'un astre à droite"
    deplacement(10, 0, indice)
 
def depl_haut(indice):
    "Déplacement d'un astre vers le haut"
    deplacement(0, -10, indice)
 
def depl_bas(indice):
    "Déplacement d'un astre vers le bas"
    deplacement(0, 10, indice)
 
 
# coordonnées de l'astre 1 déclarées en global
x1, y1 = 20, 20 # coordonnées initiales
 
# coordonnées de l'astre 2 déclarées en global
x2, y2 = 120, 120 # coordonnées initiales
 
fen = Tk() # création de la fenêtre
 
# création des boutons pour diriger l'astre 1
Button(fen, text = 'Gauche', command = depl_gauche(1)).grid(row = 1, column = 1, sticky = E)
Button(fen, text = 'Droite', command = depl_droite(1)).grid(row = 2, column = 1, sticky = E)
Button(fen, text = 'Haut', command = depl_haut(1)).grid(row = 3, column = 1, sticky = E)
Button(fen, text = 'Bas', command = depl_bas(1)).grid(row = 4, column = 1, sticky = E)
 
# création du canevas central
can = Canvas(fen, width = 200, height = 200, bg = 'white')
can.grid(row = 1, column = 2, rowspan = 4, padx = 5, pady = 5)
 
# création de l'astre 1
astre1 = can.create_oval(x1, y1, x1+10, y1+10, fill = 'red')
 
# création de l'astre 2
astre2 = can.create_oval(x2, y2, x2+10, y2+10, fill = 'blue')
 
# création du label central
Label(fen, text = 'Distance').grid(row = 5, column = 2)
 
# création des boutons pour diriger l'astre 2
Button(fen, text = 'Gauche', command = depl_gauche(2)).grid(row = 1, column = 3, sticky = W)
Button(fen, text = 'Droite', command = depl_droite(2)).grid(row = 2, column = 3, sticky = W)
Button(fen, text = 'Haut', command = depl_haut(2)).grid(row = 3, column = 3, sticky = W)
Button(fen, text = 'Bas', command = depl_bas(2)).grid(row = 4, column = 3, sticky = W)
 
fen.mainloop()
A l'exécution j'ai l'erreur suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
NameError: global name 'can' is not defined
Je ne comprends pas mon erreur, je me base sur un exemple du livre donc tout semble correct.

Si quelqu'un pouvait m'aider.

Merci.