Bonjour je viens vers vous car je n'arrive pas à supprimer les labels créent qui contiennent les nombres rentré lorsque l'utilisateur va faire ses entrée dans l'Entry (je n'ais pas encore fait tout le code comme je bloque sur le fait de tout effacer sauf les nom des colonnes donc voici ce que j'ai déjà fait :
from tkinter import*
from random import*
def reset():
for j in range(1, len(history.winfo_children())):
exec("new"+str(j)+".destroy")
niveau1.config(state=NORMAL)
niveau2.config(state=NORMAL)
niveau3.config(state=NORMAL)
play.config(state=DISABLED, command=lambda:game(lvl))
def game(a):
if(number.get() != ""):
global i, randNumber, trycount
trycount=trycount-1
entry=number.get()
number.delete(0,len(entry))
entry=int(entry)
if a==1:
if entry==randNumber:
exec("global new"+str(i))
exec("new"+str(i)+"=Label(history, text='Bravo', bd=2, relief=SOLID, width=16)")
exec("new"+str(i)+".grid(column=2, row="+str(i)+")")
play.config(command=reset, text="Recommencer")
elif entry>randNumber:
exec("global new"+str(i))
exec("new"+str(i)+"=Label(history, text='Trop grand', bd=2, relief=SOLID, width=16)")
exec("new"+str(i)+".grid(column=2, row="+str(i)+")")
i=i+1
exec("global new"+str(i))
exec("new"+str(i)+"=Label(history, text="+str(entry)+", bd=2, relief=SOLID, width=7)")
exec("new"+str(i)+".grid(column=1, row="+str(i-1)+")")
i=i+1
exec("global new"+str(i))
exec("new"+str(i)+"=Label(history, text="+str(15-trycount)+", bd=2, relief=SOLID, width=7)")
exec("new"+str(i)+".grid(column=0, row="+str(i-2)+")")
elif entry<randNumber:
exec("global new"+str(i))
exec("new"+str(i)+"=Label(history, text='Trop petit', bd=2, relief=SOLID, width=16)")
exec("new"+str(i)+".grid(column=2, row="+str(i)+")")
i=i+1
exec("global new"+str(i))
exec("new"+str(i)+"=Label(history, text="+str(entry)+", bd=2, relief=SOLID, width=7)")
exec("new"+str(i)+".grid(column=1, row="+str(i-1)+")")
i=i+1
exec("global new"+str(i))
exec("new"+str(i)+"=Label(history, text="+str(15-trycount)+", bd=2, relief=SOLID, width=7)")
exec("new"+str(i)+".grid(column=0, row="+str(i-2)+")")
if trycount==0:
exec("global new"+str(i))
exec("new"+str(i)+"=Label(history, text='Perdu', bd=2, relief=SOLID)")
exec("new"+str(i)+".grid(column=0, row="+str(i)+", columnspan=3, sticky='nesw')")
play.config(command=reset, text="Recommencer")
i=i+1
def begin(a):
global lvl, trycount, randNumber
if a==1:
txt.config(text="Niveau 1 : Vous avez 15 coups\nProposez un nombre entre 1 et 1000")
lvl=1
trycount=15
randNumber=randint(1, 1000)
print(randNumber)
elif a==2:
txt.config(text="Niveau 2 : Vous avez 10 coups\nProposez un nombre entre 1 et 1000")
lvl=2
trycount=10
randNumber=randint(1, 1000)
else:
txt.config(text="Niveau 3 : Vous avez 15 coups\nProposez un nombre entre 1 et 10 000")
lvl=3
trycount=15
randNumber=randint(1, 10000)
play.config(state=NORMAL, text="Jouer")
niveau1.config(state=DISABLED)
niveau2.config(state=DISABLED)
niveau3.config(state=DISABLED)
i=1
fen=Tk()
fen.title("Jeu du plus ou moins")
home=Frame(fen,bd=2, pady=30)
bvn=Label(home, text="Bienvenue dans le jeu du plus ou moins\nMerci de bien vouloir choisir votre niveau de jeu\n\
Niveau 1 : nombre aléatoire entre 1 et 1000 avec 15 essais maximum\n\
Niveau 2 : nombre aléatoire entre 1 et 1000 avec 10 essais maximum\n\
Niveau 3 : nombre aléatoire entre 1 et 10 000 avec 15 essais maximum")
bvn.grid(column=0, row=0, columnspan=3)
niveau1=Button(home, text="Niveau 1", command=lambda:begin(1))
niveau1.grid(column=0, row=1)
niveau2=Button(home, text="Niveau 2", command=lambda:begin(2))
niveau2.grid(column=1, row=1)
niveau3=Button(home, text="Niveau 3", command=lambda:begin(3))
niveau3.grid(column=2, row=1)
home.grid(row=0,column=0,columnspan=3)
main=Frame(fen, bd=2)
txt=Label(main)
txt.grid(column=0, row=0, columnspan=2)
number=Entry(main, width=4, font=("Courier", 30))
number.grid(column=0, row=1, columnspan=2)
play=Button(main, text="Jouer", state=DISABLED, command=lambda:game(lvl))
play.grid(column=0, row=2, sticky="e")
quitt=Button(main, text="Quitter", command=fen.destroy)
quitt.grid(column=1, row=2, sticky="w")
main.grid(row=1, column=0)
history=Frame(fen, bd=2)
essaiColumn=Label(history, text="Essai", bd=2, relief=SOLID, width=7)
essaiColumn.grid(column=0, row=0)
nombreColumn=Label(history, text="Nombre", bd=2, relief=SOLID, width=7)
nombreColumn.grid(column=1, row=0)
positionColumn=Label(history, text="Trop petit/trop grand", bd=2, relief=SOLID, width=16)
positionColumn.grid(column=2, row=0)
history.grid(row=1, column=1)
fen.mainloop()
Aidez moi sur la fonction reset() svp, je n'arrive pas à la faire fonctionner
- Edité par PaulCheveau 29 novembre 2021 à 9:10:34
- Edité par ErispoeLeNarvalo il y a environ 1 heure
Non car du coup la fonction reset est utilisée lorsque l'on a finit le niveau, et que le bouton jouer se transforme en recommencer et que du coup la partie de l'historique se supprime
J'ai approximativement compris comment le programme que tu m'as envoyer fonctionne, mais je ne vois pas en quoi cela peut m'aider, car en fait ce que je veux c'est que à chaque entrée, cela créer une ligne dans le "tableau" et du coup que quand on clique sur recommencer cela supprime les lignes, sauf que je ne sait pas comment faire
Ca j'ai déjà compris, je sais le faire, ce que je voulais c'est que comme dans le code que j'ai déjà fait c'est une fonction qui crée des Labels dès qu'on clique sur "Jouer" et une autre qui les supprime
J'ai compris comment ton programme fonctionne mais je ne vois pas comment je peu l'adapter au jeu de plus ou moins, car de base je ne veux pas créer les Labels manuellement, il m'en faudrait 49 donc cela fait un peu beaucoup. Mais comme je les crée dans une fonctionne, ils n'ont pas de nom donc je ne peu pas les supprimer
- Edité par PaulCheveau 29 novembre 2021 à 11:35:54
Ajouter les Labels supprimer dans une liste spécifique et appliquer destroy aux objets de cette liste...
On peut aussi ne pas utiliser de liste spécifique pour taper dans ce que tkinter a déjà:
import tkinter as tk
import time
def creer():
label = tk.Label(frame, text=time.time_ns())
label.pack()
def supprimer():
for w in list(frame.children.values()):
w.destroy()
root = tk.Tk()
tk.Button(root, text="Créer", width=20, command=creer).grid(row=0,column=0)
tk.Button(root, text="Supprimer", width=20, command=supprimer).grid(row=0,column=1)
frame = tk.Frame(root)
frame.grid(row=1, column=0, columnspan=2)
root.mainloop()
De toutes façons, quand on ne sait plus faire avec le peu de Python qu'on connaît, c'est qu'il est temps d'améliorer ses connaissances plutôt que de bricoler en ce disant, ce que je veux faire n'est pas si compliqué comment font les autres?
- Edité par mps 29 novembre 2021 à 14:56:25
supprimer des label avec une fonction (jeu + ou -)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Un programme basique pour t'aider.
Un autre bout de code