Problème affichage Tkinter

Résolu/Fermé
Thomas - 26 nov. 2020 à 10:14
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 28 nov. 2020 à 15:26
Bonjour,

Je rencontre un problème avec mon code python du jeu du pendue, à l'affichage Tkinter il ne m'affiche qu'une seul lettre au lieu de plusieurs.

Pouvez-vous m'aider s'il vous plait ?
Voici le code :
# Le jeu du pendu

from tkinter import * #module graphique
from random import choice # module random

fichier = open("listemots.txt", "r") # Ouverture du fichier
listemots = fichier.read() # met tous les mots du fichier dans une liste
texte = listemots.split(";")



def lettre_dans_mot(lettre) : # Fonction apparition de lettres
global partie_en_cours, mot_partiel, mot_choisi, nb_echecs, image_pendu
if partie_en_cours :
nouveau_mot_partiel = ""
lettre_dans_mot = False
i=0
while i<len(mot_choisi):
if mot_choisi[i]==lettre:
nouveau_mot_partiel = nouveau_mot_partiel + lettre
lettre_dans_mot = True
else:
nouveau_mot_partiel = nouveau_mot_partiel + mot_partiel[i]
i+=1
mot_partiel = nouveau_mot_partiel
afficher_mot(mot_partiel)
if not lettre_dans_mot : # lettre fausse. Changer le dessin.
nb_echecs += 1
nomFichier = "pendu_"+str(nb_echecs)+".gif"
photo=PhotoImage(file=nomFichier)
image_pendu.config(image=photo)
image_pendu.image=photo
if nb_echecs == 7: # trop d'erreurs. Fini.
partie_en_cours = False
afficher_mot(mot_choisi)
elif mot_partiel == mot_choisi: # le mot a été trouvé !
partie_en_cours = False


def afficher_mot(mot): # Fonction mot
global lettres
mot_large = ""
i=0
while i<len(mot): # Ajoute un espace entre les lettres
mot_large = mot_large + mot[i] + " "
i+=1
canevas.delete(lettres)
lettres = canevas.create_text(320,60,text=mot_large,fill='black',font='Courrier 30')


def init_jeu(): #definition jeu
global mot_choisi, mot_partiel, image_pendu, lettres
global nb_echecs, partie_en_cours, liste_mots
nb_echecs = 0
partie_en_cours = True
mot_choisi = choice(listemots).rstrip()
mot_choisi = mot_choisi.upper()
mot_partiel = "-" * len(mot_choisi)
afficher_mot(mot_partiel)
photo=PhotoImage(file="pendu_0.gif")
image_pendu.config(image=photo)
image_pendu.image=photo


# création du widget principal / fenetre

fenetre = Tk()
fenetre.title("Le jeu du pendu")

canevas = Canvas(fenetre, bg='white', height=500, width=620)
canevas.pack(side=BOTTOM)

bouton = [0]*26
for i in range(26):
bouton[i] = Button(fenetre,text=chr(i+65),command=lambda x=i+65:lettre_dans_mot(chr(x)))
bouton[i].pack(side=LEFT)

bouton2 = Button(fenetre,text='Quitter',command=fenetre.quit)
bouton2.pack(side=RIGHT)
bouton1 = Button(fenetre,text='Recommencer',command=init_jeu)
bouton1.pack(side=RIGHT)

photo=PhotoImage(file="pendu_0.gif")
image_pendu = Label(canevas, image=photo, border=0)
image_pendu.place(x=120, y=140)
lettres = canevas.create_text(320,60,text="",fill='black',font='Courrier 30')

init_jeu()

fenetre.mainloop()
fenetre.destroy()

5 réponses

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
28 nov. 2020 à 15:26
Hello Thomas,

Je pense que tu peux marquer cet appel comme "résolu"
1
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
26 nov. 2020 à 10:23
L'indentation étant importante en Python, merci de re poster ton code avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci :

def test():
    print('test')

test()
0
<code csharp># Le jeu du pendu
 
from tkinter import *   #module graphique
from random import choice   # module random
 
fichier = open("listemots.txt", "r")     # Ouverture du fichier
listemots = fichier.read()       # met tous les mots du fichier dans une liste
texte = listemots.split(";")



def lettre_dans_mot(lettre) : # Fonction apparition de lettres
    global partie_en_cours, mot_partiel, mot_choisi, nb_echecs, image_pendu
    if partie_en_cours : 
        nouveau_mot_partiel = ""
        lettre_dans_mot = False
        i=0
        while i<len(mot_choisi):
            if mot_choisi[i]==lettre:
                nouveau_mot_partiel = nouveau_mot_partiel + lettre
                lettre_dans_mot = True 
            else:
                nouveau_mot_partiel = nouveau_mot_partiel + mot_partiel[i]
            i+=1
        mot_partiel = nouveau_mot_partiel  
        afficher_mot(mot_partiel)
        if not lettre_dans_mot :    # lettre fausse. Changer le dessin.
            nb_echecs += 1
            nomFichier = "pendu_"+str(nb_echecs)+".gif"
            photo=PhotoImage(file=nomFichier)
            image_pendu.config(image=photo)
            image_pendu.image=photo
            if nb_echecs == 7:      # trop d'erreurs. Fini.
                partie_en_cours = False
                afficher_mot(mot_choisi)
        elif mot_partiel == mot_choisi:     # le mot a été trouvé !
            partie_en_cours = False
 

def afficher_mot(mot):   # Fonction mot
    global lettres
    mot_large = ""
    i=0
    while i<len(mot):       # Ajoute un espace entre les lettres
        mot_large = mot_large + mot[i] + " "
        i+=1
    canevas.delete(lettres)
    lettres = canevas.create_text(320,60,text=mot_large,fill='black',font='Courrier 30') 

    
def init_jeu(): #definition jeu
    global mot_choisi, mot_partiel, image_pendu, lettres
    global nb_echecs, partie_en_cours, liste_mots
    nb_echecs = 0
    partie_en_cours = True
    mot_choisi = choice(listemots).rstrip()
    mot_choisi = mot_choisi.upper()
    mot_partiel = "-" * len(mot_choisi)
    afficher_mot(mot_partiel)
    photo=PhotoImage(file="pendu_0.gif")
    image_pendu.config(image=photo)
    image_pendu.image=photo
        

# création du widget principal / fenetre 

fenetre = Tk()
fenetre.title("Le jeu du pendu")

canevas = Canvas(fenetre, bg='white', height=500, width=620)
canevas.pack(side=BOTTOM)

bouton = [0]*26
for i in range(26):
    bouton[i] = Button(fenetre,text=chr(i+65),command=lambda x=i+65:lettre_dans_mot(chr(x)))
    bouton[i].pack(side=LEFT)

bouton2 = Button(fenetre,text='Quitter',command=fenetre.quit)
bouton2.pack(side=RIGHT)
bouton1 = Button(fenetre,text='Recommencer',command=init_jeu)
bouton1.pack(side=RIGHT)

photo=PhotoImage(file="pendu_0.gif")
image_pendu = Label(canevas, image=photo, border=0)
image_pendu.place(x=120, y=140)
lettres = canevas.create_text(320,60,text="",fill='black',font='Courrier 30') 

init_jeu()

fenetre.mainloop()
fenetre.destroy()
</code>
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 26 nov. 2020 à 10:46
cet appel fait double emploi avec 'séparer mots dans une liste en .txt', non ?

je t'ai répondu dans l'autre appel ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oui j'ai vu merci
0