Bonjour

Je souhaite effacer un nombre entrer par mes bouton dans ma grille, je me sers donc de Can.delete(x) mais je n'arrive pas à la faire fonctionner. Quelqu'un aurait il une idée de mon problème ?

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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import random
from pylab import*
import numpy
from random import*
import copy
from tkinter import*
from random import*
global G
 
def GrilleRandom():
    global G,n, A
    n=4  #Dimensions du Sudoku
    G = array([[int(n) for x in range(0,n)] for y in range(0,n)], dtype=object)
    G[0] = sample(range(1,n+1), n)          #on créée une première ligne aléatoire de chiffres tous différents
    x = 1                                   #on commence donc le x à la seconde ligne
    y = 0                                   #on commence à la première colonne
    while x<n and y<n:                      #tant que x et y sont inférieur au maximum de la grille (4)
 
        m =[]                               #Nombres déjà utilisés dans les cellules et qui ne peuvent être réutilisés
        choix =[]                           #Liste des nombres qui peuvent être utilisés pour une cellule donnée
        for T in range (0,x):               #on lit la liste sur toutes les lignes, soit de 0 à 4
            m.append(G[T][y])               #on ajoute à la liste chaque nombres utilisés*
            T=T+1                           #on indente la liste et on recommence
 
        if y!=0:                            #Même manipulation cette fois pour les ordonnées
            for T in range (0,y):
                m.append(G[x][T])
                T=T+1
 
        #Pour savoir si un nombre est pair, on fait son modulo et si son reste est égal à 0, alors il est pair
 
        if x%2!=0:
            if (x+y)%2!=0:                  #on a remarqué que lorsque x est pair, (seconde et quatrième ligne),
                    m.append(G[x-1][y+1])   #les nombres en haut à gauche et en haut à droite doivent être différents/
            else:                           #En cherchant quand la somme de x et de y est pair, on peut déterminer quels nombres
                    m.append(G[x-1][y-1])   #enregistrer dans la liste m, soit ceux déjà utilisés
                                            #donc quand x+y est pair, on enregistre le nombre en haut à droite
                                            #et quand x+y est impair, on enregistre le nombre en haut à gauche
 
 
        for k in range (1,n+1):             #on lit k de 1 à 4
            if k not in m:                  #si un nombre n'appartient pas à la liste m, alors on l'ajoute à une novuelle liste
                choix.append(k)
            k=k+1                           #on indente
 
        if len(choix)!=0:                    #on lit toute la liste choix avec len
                G[x][y]=choice(choix)        #le programme choisit un nombre aléatoire dans la liste choix, qui changera à chaque ligne/ordonnée
        else:
            x=1
            y=0
        y=y+1                                #on indente les ordonnées, jusqu'à 4
        if y==n:
            y=0
            x=x+1
                                     #quand y=4, on indente les lignes
    A = G.copy()
 
GrilleRandom()
 
def GrilleSuppr():
    p = o =0
    while p<n and o<n:
 
        a = ''
        G[o][p]=a
        G[o][randint(2,3)]=a
        G[randint(2,3)][p]=a
 
        p = p + 1
        o = o + 1
GrilleSuppr()
 
ecriture=("comic sans ms",13)
nbcase=4
case=100
x0,y0=9,9
chifre=[1,2,3,4]
 
 
def zut():
    ntm=Toplevel()
 
    def fin ():
        fenetre.quit()
        fenetre.destroy()
 
    def grille():
        for i in range(nbcase+1):
            Can.create_line(x0+case*i, y0,x0+case*i,y0 + nbcase*case)
            Can.create_line(x0, y0+case*i,x0+nbcase*case ,y0+case*i)
            for m in range (0,4):
                Can.create_text(60,(m+0.6)*100,text=G[m][0])
                Can.create_text(160,(m+0.6)*100,text=G[m][1])
                Can.create_text(260,(m+0.6)*100,text=G[m][2])
                Can.create_text(360,(m+0.6)*100,text=G[m][3])
 
    def place_number(event):
        TexteC.delete("0.0",END)# on efface l'écriture précédente
        TexteC.insert(END,"clic detecte en x="+str(event.x) + " et y = " + str(event.y))
        a=(event.x)//100 #ici a est censé récupéré la position du clic pour ce qui est des abscisses
        b=(event.y)//100 #ici b fait la même chose que b mais pour lees ordonnées
        text = current
        Can.create_text(a,b,text=text) #ici la fonction est censé afficher le texte au coordonées a et b
        Can.create_text((a+0.5)*100+10,(b+0.5)*100+10,text=text) #ici on ajoute 0,5 à a et b pour centrer le nombre dans la case
 
    def jouer(event):
        global trouve
        [i,j]=correspond(event.x,event.y)
        if i in range(nb) and j in range (nb):   # on ne fait rien si le click est hors grille
            Can.create_rectangle(x0 +case*j,y0+case*i,x0 +case*(j+1),y0+case*(i+1),fill=coul(i,j))
 
    def GrilleVérification():
        global G
        a = "Vous avez juste"
        b = 0
        for p in range(0,4):
            for o in range(0,4):
                if G[o][p]!=A[o][p]:
                    b= b + 1
        if b==1:
            a = "Vous avez " +b+ "erreur"
        else:
            if b>1:
                a = "Vous avez" +b+ "erreurs"
 
    def Supprimer():
        Can.delete(TexteC)
 
    def display(x):
        def wrap():
            global current
            current = x
        return wrap
 
 
    Cadre=Frame(ntm)
    Texte1=Label(ntm,text="Jeu du Sudoku",fg="red",font=ecriture)
    BouttonQuit=Button(ntm,text="quitter", command=fin)
    BouttonJouer=Button(ntm,text="jouer", command=grille)
    TexteC=Text(ntm,height=25,width=25)
    Can=Canvas(ntm,height=500,width=500,bg="white")
    Bouton1=Button(ntm,text="4",command=display('4'))
    Bouton2=Button(ntm,text="3",command=display('3'))
    Bouton3=Button(ntm,text="2",command=display('2'))
    Bouton4=Button(ntm,text="1",command=display('1'))
    Bouton5=Button(ntm,text="Vérifier",command=GrilleVérification)
    Bouton6=Button(ntm,text="Supprimer",command=Supprimer)
 
    Texte1.grid(row=0,column=0)
    BouttonQuit.grid(row=50, column=100)
    Cadre.grid(row=1,column=0)
    Can.grid(row=1, column=0)
    BouttonJouer.grid(row=0, column=50)
    TexteC.grid(row=1, column=3)
    Bouton1.grid(row=45, column=49)
    Bouton2.grid(row=45, column=48)
    Bouton3.grid(row=45, column=47)
    Bouton4.grid(row=45, column=46)
    Bouton5.grid(row=50, column=50)
    Bouton6.grid(row=50, column=60)
 
    Can.bind("<Button-1>",place_number)
 
fenetre=Tk()
 
 
 
Texte=Label(fenetre,text="Bienvenue dans le jeu de sudoku",fg="red",font=ecriture)
Texte.grid(row=0,column=3)
 
Boutoniveau1=Button(fenetre,text="Niveau 1",command=zut)
Boutoniveau1.grid(row=2,column=3)
 
 
fenetre.mainloop()