Bonjour,
Dans mon projet, il faut remplir une grille de bataille navale.
Je veux donc enregistrer la position en cliquant sur un canvas (grille de jeu) puis traiter cette coordonnée (chaîne de caractères ex B3) dans le programme pour construire un bateau ou faire un tir.
J'ai essayé plusieurs solutions ( passer par une class, variables globales...) et j'arrive à construire un premier bateau mais le programme ne ressort pas de la boucle du event.

Vous aurez compris que je débute en Python donc désolé si mes propos ne sont pas très clair et je vous remercie d'avance pour vos réponses.

Mon programme:
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 
from tkinter import *
 
ordonnees=['A','B','C','D','E','F','G','H','I','J']
abscisses=['1','2','3','4','5','6','7','8','9','10']
 
 
fen = Tk()
fen.title('Joueur1')
 
message = Label(fen, text='Bataille navale')
message.grid(row = 0, column = 0, columnspan=2, padx=3, pady=3, sticky = W+E)
 
 
bouton_quitter = Button(fen, text='Quitter', command = fen.destroy)
bouton_quitter.grid(row = 2, column = 1, padx = 3, pady = 3, sticky = S+W+E)
 
bouton_reload = Button(fen, text='Recommencer')
bouton_reload.grid(row = 2, column = 0, padx = 3, pady = 3, sticky = S+W+E)
 
 
dessin = Canvas(fen, bg="blue", width=601, height=601)
dessin.grid(row = 1, column = 0, columnspan = 2, padx = 5, pady = 5)
 
lignes = []
for i in range(13):
    lignes.append(dessin.create_line(0, 50*i+2, 603, 50*i+2, width=3))
    lignes.append(dessin.create_line(50*i+2, 0, 50*i+2, 603, width=3))
 
 
 
for i in range(10):      # lettres et chiffres de la grille
    case = dessin.create_text(25, 50*i+75, text=ordonnees[i], font="Arial 16", fill="black")
    case = dessin.create_text(575, 50*i+75, text=ordonnees[i], font="Arial 16", fill="black")
    case = dessin.create_text(50*i+75, 25, text=abscisses[i], font="Arial 16", fill="black")
    case = dessin.create_text(50*i+75, 575, text=abscisses[i], font="Arial 16", fill="black")
 
cases = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],       # Tableau
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
 
## Fonction bateau
bateaux=[4,3,3,2,2,2,1,1,1,1]
u = int(0)
 
def posBat(event) :      # construction de la flotte
    global b
    u = int(0)
    T = int(0)
    if u < 10 :
        b = bateaux[u]       
        message.configure(text='Clic sur la position du bateau à {} cases:'.format(bateaux[u]))
        dessin.bind('<Button-1>', position)
        u+=1
 
def position(event) :      # clic position
    """ Entrées : Un événement de la souris
    Sortie : Affiche en temps réel les coordonnées de la souris dans la zone de texte"""
    global l,P,c
    abscisse = event.x
    ordonnee = event.y
    l = (ordonnee-2)//50                  # Ligne du clic
    P = ordonnees[l-1]
    c = (abscisse-2)//50                  # Colonne du clic
    for j in range(2):
        for k in range(2):       # vérification de l'absence de voisins au clic
            if cases[l-1+j][c-1+k] == 1:
                message.configure(text='Clic sur la position du bateau à {} cases:'.format(bateaux[u]))
                dessin.bind('<Button-1>', position)
            else :       # vérification de l'absence de voisins au clic
                case = dessin.create_rectangle(50*c, 50*l, 50*c+50, 50*l+50, fill='grey')
                case = dessin.create_text(50*c+25, 50*l+25, text=b, font="Arial 16", fill="white" )
                message.configure(text='Cliquer à droite ou en dessous de ( {} ; {} )'.format(P, c))
                dessin.bind('<Button-1>', dirBat)
 
 
def dirBat(event) :      # choix vertical ou horizontal
    global l1,P1,c1,u
    abscisse = event.x
    ordonnee = event.y
    l1 = (ordonnee-2)//50                  
    P1 = ordonnees[l1-1]
    c1 = (abscisse-2)//50
    T = int(0)
 
    ''' message.configure(text='Cliquer à droite ou en dessous de ( {} ; {} )'.format(P, c)) '''
    if c1 != c and l1 == l:  # navire horizontal
        for n in range(b):
            for j in range(2):       # vérification de l'absence de voisins horizontaux
                if cases[l-1+j][c+1+n] == 1:
                    message.configure(text='Clic sur la position du bateau à {} cases:'.format(bateaux[u]))
                    dessin.bind('<Button-1>', position)
                else:
                    cases[l][c+n] = 1
                    T += 1
                    case = dessin.create_rectangle(50*(c+n), 50*l, 50*(c+n)+50, 50*l+50, fill='grey')
                    case = dessin.create_text(50*(c+n)+25, 50*l+25, text=b, font="Arial 16", fill="white")
 
    if c1 == c and l1 != l:  # navire vertical
        for n in range(b):
            for j in range(2):       # vérification de l'absence de voisins verticaux
                if cases[l+1+n][c-1+j] == 1:
                    message.configure(text='Clic sur la position du bateau à {} cases:'.format(bateaux[u]))
                    dessin.bind('<Button-1>', position)
                else:
                    cases[l+n][c] = 1
                    T += 1
                    case = dessin.create_rectangle(50*c, 50*(l+n), 50*c+50, 50*(l+n)+50, fill='grey')
                    case = dessin.create_text(50*c+25, 50*(l+n)+25, text=b, font="Arial 16", fill="white")
 
 
    print(b)
    print(cases)
 
 
 
##----- Programme principal -----##
 
message.configure(text='Clic pour démarrer :')
dessin.bind('<Button-1>', posBat)
fen.mainloop()                      # Boucle d'attente des événements