Bonjour,
C'est un projet à réaliser en langage python (Tkinter), le but est de réaliser un jeu "Le Compte est bon" (il vaut mieux connaître le jeu pour comprendre ^^')
J'ai donc choisi de présenter le tirage des 6 chiffres sur des boutons (vides au départ). Lorsque l'on clique sur un des boutons, le chiffre inscrit dessus s'affiche dans un Label en-dessous (pour faire les lignes de calcul).
A cela s'ajoute un bouton annuler qui annule la dernière ligne de calcul.

Et là réside mon problème, lorsque je clique sur annuler:
(calcul_5_1.configure(textvariable=x)) (avec x="") fonction de ce genre-là,
Le textvariable du Label se met bien à la valeur "" (vide) mais l'affichage laisse le chiffre(1) quand même (je sais c'est dur à comprendre)
Donc en fait j'ai un test qui fait que si une case n'est pas vide on test la case suivante etc, le chiffre du bouton sur lequel on a cliqué s'inscrit dans la première case vide qu'il trouve.
En l'occurrence si je fais "annuler" et si je clique ensuite sur un bouton-chiffre, le chiffre ira bien s'inscrire dans la première case de la ligne que j'ai annulée, prenant la place du chiffre(1) (celui-ci s'efface et l'autre s'inscrit à la place)

Bref ceci reste incompréhensible sans le code et surtout l'interface graphqiue je le conçois ^^'

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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
#-*- coding:Utf-8 -*-
from Tkinter import *
from random import *
import tkFont
 
 
#==================== DÉFINITIONS DES VARIABLES GLOBALES ====================
 
l = [1,2,3,4,5,6,7,8,9,10,25,50,75,100]
nombres = []
boutonsNombres = ["affichageNombreDeBase1", "affichageNombreDeBase2", "affichageNombreDeBase3", "affichageNombreDeBase4", "affichageNombreDeBase5", "affichageNombreDeBase6"]
boutonsOperateurs = ["addition", "soustraction", "multiplication", "division"]
boutonsResultats = ["estEgalA", "estEgalA2", "estEgalA3", "estEgalA4", "estEgalA5"]
 
 
#==================== CRÉATION DES BOUTONS ====================
 
def creerBoutonsNombres():
    listeCommandes = [utiliserNombreBouton1, utiliserNombreBouton2, utiliserNombreBouton3, utiliserNombreBouton4, utiliserNombreBouton5, utiliserNombreBouton6]
    for i in range(6):
        boutonsNombres[i] = Button(fen, textvariable="", width=3, cursor="pencil", fg="blue", command=listeCommandes[i])
        boutonsNombres[i].grid(column=i, row=2)
        boutonsNombres[i].config(font=presentationNombres)
 
def creerBoutonsOperateurs():
    listeOperateurs = ["+", "-", "*", "/"]
    listeCommandes = [addition, soustraction, multiplication, division]
    for i in range(4):
        boutonsOperateurs[i] = Button(fen, text=listeOperateurs[i], width=2, command=listeCommandes[i])
        boutonsOperateurs[i].grid(column=i+1, row=3)
        boutonsOperateurs[i].config(font=presentationNombres)
 
def creerBoutonsEstEgalA():
    for i in range(5):
        boutonsResultats[i] = Button(fen, text="=", width=5, command=calculer)
        boutonsResultats[i].grid(column=5, row=4+i)
 
 
 
#==================== FONCTIONS DES BOUTONS ====================
 
# \\\Nouvelle Partie///
def effacer():
    caseCalcul = [calcul_5_1, calcul_5_2, calcul_5_3, calcul_5_5, calcul_4_1, calcul_4_2, calcul_4_3, calcul_4_5, calcul_3_1, calcul_3_2, calcul_3_3, calcul_3_5, calcul_2_1, calcul_2_2, calcul_2_3, calcul_2_5, calcul_1_1, calcul_1_2, calcul_1_3, calcul_1_5]
    for i in range (20):
        caseCalcul[i].configure(textvariable="")
    for j in range(6):
        boutonsNombres[j].config(state=ACTIVE)
 
def genererNombresDeBase():
    x = sample(l,6)
    for i in range(6):
        nombres.append(IntVar())
        nombres[i].set(x[i])
        boutonsNombres[i].config(textvariable=nombres[i], fg="blue")
 
def genererNombreCible():
    x = randint(100,999)
    affichageNombreCible.config(text=x, fg="#009900")
 
def nouvellePartie():
    effacer()
    genererNombresDeBase()
    genererNombreCible()
 
 
# \\\Quitter///
def fermerJeu():
    fen.quit()
    fen.destroy()
 
 
# \\\Annuler///
def annuler():
    caseCalcul = [calcul_5_1, calcul_5_2, calcul_5_3, calcul_5_5, calcul_4_1, calcul_4_2, calcul_4_3, calcul_4_5, calcul_3_1, calcul_3_2, calcul_3_3, calcul_3_5, calcul_2_1, calcul_2_2, calcul_2_3, calcul_2_5, calcul_1_1, calcul_1_2, calcul_1_3, calcul_1_5]
    if caseCalcul[0].cget("textvariable") != "":
        if caseCalcul[1].cget("textvariable") != "":
            for i in range(4):
                caseCalcul[i].configure(textvariable="")
    elif caseCalcul[4].cget("textvariable") != "":
        if caseCalcul[5].cget("textvariable") != "":
            for i in range(4):
                caseCalcul[i+4].configure(textvariable="")
    elif caseCalcul[8].cget("textvariable") != "":
        if caseCalcul[9].cget("textvariable") != "":
            for i in range(4):
                caseCalcul[i+8].configure(textvariable="")
    elif caseCalcul[12].cget("textvariable") != "":
        if caseCalcul[13].cget("textvariable") != "":
            for i in range(4):
                caseCalcul[i+12].configure(textvariable="")
    elif caseCalcul[16].cget("textvariable") != "":
        if caseCalcul[17].cget("textvariable") != "":
            for i in range(4):
                caseCalcul[i+16].configure(textvariable="")
 
 
# \\\Ensemble des Boutons-Nombres///
def utiliserNombreBouton(x):
    global nombres
    caseCalcul = [calcul_1_1, calcul_1_3, calcul_2_1, calcul_2_3, calcul_3_1, calcul_3_3, calcul_4_1, calcul_4_3, calcul_5_1, calcul_5_3]
    i = 0
    while i < 10:
        if caseCalcul[i].cget("textvariable") == "":
            caseCalcul[i].config(textvariable=nombres[x-1])
            i = i+10
        else:
            i = i+1
    boutonsNombres[x-1].config(state=DISABLED)
 
def utiliserNombreBouton1():
    utiliserNombreBouton(1)
 
def utiliserNombreBouton2():
    utiliserNombreBouton(2)
 
def utiliserNombreBouton3():
    utiliserNombreBouton(3)
 
def utiliserNombreBouton4():
    utiliserNombreBouton(4)
 
def utiliserNombreBouton5():
    utiliserNombreBouton(5)
 
def utiliserNombreBouton6():
    utiliserNombreBouton(6)
 
 
# \\\Ensemble des Boutons-Opérateurs///
def operation(x):
    caseCalcul = [calcul_1_2, calcul_2_2, calcul_3_2, calcul_4_2, calcul_5_2]
    listeOperateurs = ["+", "-", "*", "/"]
    i = 0
    while i < 5:
        if caseCalcul[i].cget("text") == "":
            caseCalcul[i].config(text=listeOperateurs[x-1])
            i = i+5
        else:
            i = i+1
 
def addition():
    operation(1)
 
def soustraction():
    operation(2)
 
def multiplication():
    operation(3)
 
def division():
    operation(4)
 
 
# \\\Ensemble des Boutons-Opérateurs///
 
def calculer():
    return ""
 
 
 
# \\\Solution///
 
#========== Interface Graphique ==========
 
# >>>>>>>>>>>>>>>>>>>>>>>>> Création de la fenêtre <<<<<<<<<<<<<<<<<<<<<<<<<
 
fen = Tk()                                                                                                              # Création de la fenêtre du Jeu
fen.geometry("640x480")                                                                                                 # Définition de la taille de la fenêtre
fen.title("Le Compte est Bon !")                                                                                        # Création du Titre de la fenêtre
 
# >>>>>>>>>>>>>>>>>>>>>>>>> Présentation esthétique des Widgets <<<<<<<<<<<<<<<<<<<<<<<<<
 
presentationTexte = tkFont.Font(fen)
presentationTexte.config(size=8, family="Garamond", slant="roman", weight="bold", underline=False, overstrike=False)
presentationNombres = tkFont.Font(fen)
presentationNombres.config(size=12, slant="roman", weight="bold", underline=False, overstrike=False)
 
# >>>>>>>>>>>>>>>>>>>>>>>>> Création des Widgets <<<<<<<<<<<<<<<<<<<<<<<<<
 
# 1) Labels
LabelTitre = Label(fen, text="Le Compte Est Bon !")                                                                     # "Le Compte Est Bon !"
LabelAffichageNombresDeBase = Label(fen, text="Les Chiffres et les Nombres à utiliser:")                                # "Les Chiffres et les Nombres à utiliser:"
LabelAffichageNombreCible = Label(fen, text="Pour trouver...")                                                          # "Pour trouver..."
LabelFinDuJeu = Label(fen, width=10, relief="groove")                                                                   # "Bravo !"
 
# 2) Interface Jeu
creerBoutonsNombres()
affichageNombreCible = Label(fen, width=5, relief="groove")                                                             # Entrée le Nombre à trouver
 
calcul_1_1 = Label(fen, textvariable="", width=10, relief="groove")                                                     #calcul_X_Y avec X=ligne et Y=colonne dans le cahmp de calcul
calcul_1_2 = Label(fen, textvariable="", width=5, relief="groove")
calcul_1_3 = Label(fen, textvariable="", width=10, relief="groove")
calcul_1_5 = Button(fen, textvariable="", width=5, state=DISABLED)
 
calcul_2_1 = Label(fen, textvariable="", width=10, relief="groove")
calcul_2_2 = Label(fen, textvariable="", width=5, relief="groove")
calcul_2_3 = Label(fen, textvariable="", width=10, relief="groove")
calcul_2_5 = Button(fen, textvariable="", width=5, state=DISABLED)
 
calcul_3_1 = Label(fen, textvariable="", width=10, relief="groove")
calcul_3_2 = Label(fen, textvariable="", width=5, relief="groove")
calcul_3_3 = Label(fen, textvariable="", width=10, relief="groove")
calcul_3_5 = Button(fen, textvariable="", width=5, state=DISABLED)
 
calcul_4_1 = Label(fen, textvariable="", width=10, relief="groove")
calcul_4_2 = Label(fen, textvariable="", width=5, relief="groove")
calcul_4_3 = Label(fen, textvariable="", width=10, relief="groove")
calcul_4_5 = Button(fen, textvariable="", width=5, state=DISABLED)
 
calcul_5_1 = Label(fen, textvariable="", width=10, relief="groove")
calcul_5_2 = Label(fen, textvariable="", width=5, relief="groove")
calcul_5_3 = Label(fen, textvariable="", width=10, relief="groove")
calcul_5_5 = Button(fen, textvariable="", width=5, state=DISABLED)
 
creerBoutonsEstEgalA()
creerBoutonsOperateurs()
 
# 3) Boutons
boutonNouvellePartie = Button(fen, text="Nouvelle Partie", cursor="center_ptr", command=nouvellePartie)             # Nouvelle Partie
boutonAnnulerDernierCoup = Button(fen, text="Annuler", cursor="center_ptr", command=annuler)                        # Annuler le Dernier Coup
boutonSolution = Button(fen, text="Solution", cursor="center_ptr")                                                  # Solution
boutonQuitter = Button(fen, text="Quitter", cursor="center_ptr", command=fermerJeu)                                 # Quitter
 
# >>>>>>>>>>>>>>>>>>>>>>>>> Placement des Widgets <<<<<<<<<<<<<<<<<<<<<<<<<
 
# 1) Labels
 
LabelTitre.grid(columnspan=10, column=0, row=0)                                                                     # Placement 
LabelAffichageNombresDeBase.grid(columnspan=6, column=0, row=1)                                                     # Placement "Nombres à trouver"
LabelAffichageNombreCible.grid(columnspan=2, column=6, row=1)                                                       # Placement "Nombre à trouver"
LabelFinDuJeu.grid(columnspan=2, column=8, rowspan=3, row=5)
 
# 2) Interface Jeu
affichageNombreCible.grid(columnspan=2, column=6, row=2)                                                            # Placement de l'Entrée du Nombre à trouver
 
calcul_1_1.grid(columnspan=2, column=0 , row=4)
calcul_1_2.grid(column=2 , row=4)
calcul_1_3.grid(columnspan=2, column=3 , row=4)
calcul_1_5.grid(columnspan=2, column=6 , row=4)
 
calcul_2_1.grid(columnspan=2, column=0 , row=5)
calcul_2_2.grid(column=2 , row=5)
calcul_2_3.grid(columnspan=2, column=3 , row=5)
calcul_2_5.grid(columnspan=2, column=6 , row=5)
 
calcul_3_1.grid(columnspan=2, column=0 , row=6)
calcul_3_2.grid(column=2 , row=6)
calcul_3_3.grid(columnspan=2, column=3 , row=6)
calcul_3_5.grid(columnspan=2, column=6 , row=6)
 
calcul_4_1.grid(columnspan=2, column=0 , row=7)
calcul_4_2.grid(column=2 , row=7)
calcul_4_3.grid(columnspan=2, column=3 , row=7)
calcul_4_5.grid(columnspan=2, column=6 , row=7)
 
calcul_5_1.grid(columnspan=2, column=0 , row=8)
calcul_5_2.grid(column=2 , row=8)
calcul_5_3.grid(columnspan=2, column=3 , row=8)
calcul_5_5.grid(columnspan=2, column=6 , row=8)
 
# 3) Boutons
boutonNouvellePartie.grid(columnspan=2, column=8, row=2)                                                            # Placement du Bouton "Nouvelle Partie"
boutonAnnulerDernierCoup.grid(columnspan=2, column=3, row=10)                                                       # Placement du Bouton "Annuler le Dernier Coup"
boutonSolution.grid(columnspan=2, column=3, row=12)                                                                 # Placement du Bouton "Solution"
boutonQuitter.grid(columnspan=2, column=8, row=12)                                                                  # Placement du Bouton "Quitter"
 
# >>>>>>>>>>>>>>>>>>>>>>>>> Présentation Générale <<<<<<<<<<<<<<<<<<<<<<<<<
 
LabelAffichageNombresDeBase.config(font=presentationTexte)
LabelAffichageNombreCible.config(font=presentationTexte)
affichageNombreCible.config(font=presentationNombres)
 
# >>>>>>>>>>>>>>>>>>>>>>>>> Lancement de la fenêtre <<<<<<<<<<<<<<<<<<<<<<<<<
 
fen.mainloop()                                                                                                      # Execution de la fenêtre du Jeu

Je sais très bien que c'est le gros bordel, pas optimisé du tout, mais avant je cherche à ce que ça marche (gros critère de notation) avant d'essayer d'optimiser tout ça (y'a du boulot :'()
Merci d'avance