Problème affichage Tkinter

Résolu
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

  1. Hello Thomas,

    Je pense que tu peux marquer cet appel comme "résolu"
    1. cet appel fait double emploi avec 'séparer mots dans une liste en .txt', non ?

      je t'ai répondu dans l'autre appel ...
      1. <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>