Tkinter / image jpg

SWBxdy -  
 Phil_1857 -

Bonjour,

Je me permets de demander de l'aide à des programmeurs ou autres personnes ayant des connaissances en python, j'ai un programme de jeux memories, mais celui-ci me met à chaque fois une erreur de chargement des images, je vous serai reconnaissant de bien vouloir apporter les correctifs nécessaires à ce programme pour son bon fonctionnement, je vous le copie colle ci-dessous.

import tkinter as tk
import random
from tkinter import messagebox

# Définition de la taille de la fenêtre principale
LARGEUR_FENETRE = 1100
HAUTEUR_FENETRE = 600
TAILLE_GRILLE = 6
TAILLE_IMAGE = 220

# Variables globales pour le jeu
premier_clic = None
paires_trouvées = 0
tentatives = 0

# Création de la fenêtre principale
racine = tk.Tk()
racine.title("Jeu de Mémoire")

# Définissez ici les chemins de vos images
chemins_images = [
        "E:\\memories paul enzo\\image1.jpg", "E:\\memories paul enzo\\image2.jpg", "E:\\memories paul enzo\\image3.jpg", "E:\\memories paul enzo\\image4.jpg", 
        "E:\\memories paul enzo\\image5.jpg", "E:\\memories paul enzo\\image6.jpg", "E:\\memories paul enzo\\image7.jpg", "E:\\memories paul enzo\\image8.jpg",
        "E:\\memories paul enzo\\image9.jpg", "E:\\memories paul enzo\\image10.jpg","E:\\memories paul enzo\\image11.jpg", "E:\\memories paul enzo\\image12.jpg", 
        "E:\\memories paul enzo\\image13.jpg", "E:\\memories paul enzo\\image14.jpg", "E:\\memories paul enzo\\image15.jpg", "E:\\memories paul enzo\\image16.jpg", 
        "E:\\memories paul enzo\\image17.jpg", "E:\\memories paul enzo\\image18.jpg" 
]

# Mélangez les chemins des images
random.shuffle(chemins_images)

# Fonction pour charger les images depuis les fichiers JPEG
def charger_images():
    images = []
    for chemin in chemins_images:
        try:
            tk_image = tk.PhotoImage(file=chemin)
            images.extend([tk_image, tk_image])
        except Exception as e:
            messagebox.showerror("Erreur", f"Une erreur s'est produite lors du chargement des images : {str(e)}")
            racine.destroy()
            exit()
    return images

# Création d'une grille de boutons avec des images
def créer_grille(racine, images):
    boutons = []
    for i in range(TAILLE_GRILLE):
        ligne = []
        for j in range(TAILLE_GRILLE):
            bouton = tk.Button(racine, width=TAILLE_IMAGE, height=TAILLE_IMAGE, command=lambda i=i, j=j: révéler(i, j))
            bouton.grid(row=i, column=j)
            ligne.append(bouton)
        boutons.append(ligne)
    return boutons

# Fonction pour révéler une image
def révéler(i, j):
    global premier_clic, tentatives, paires_trouvées

    boutons[i][j].config(image=images[i * TAILLE_GRILLE + j], state="disabled")

    if premier_clic is None:
        premier_clic = (i, j)
    else:
        x, y = premier_clic
        if chemins_images[i * TAILLE_GRILLE + j] == chemins_images[x * TAILLE_GRILLE + y]:
            paires_trouvées += 1
            if paires_trouvées == 18:
                messagebox.showinfo("Victoire!", f"Vous avez gagné en {tentatives} tentatives!")
                racine.quit()
        else:
            racine.after(1000, cacher, i, j, x, y)
        premier_clic = None
        tentatives += 1

# Fonction pour cacher deux images
def cacher(i1, j1, i2, j2):
    boutons[i1][j1].config(image="", state="active")
    boutons[i2][j2].config(image="", state="active")

# Charger les images
images = charger_images()

# Créer la grille de boutons avec des images
boutons = créer_grille(racine, images)

# Initialiser les variables globales
premier_clic = None
paires_trouvées = 0
tentatives = 0

racine.mainloop()

Cordialement.
Windows / Chrome 124.0.0.0

2 réponses

  1. plourou
     

    Salut,

    tkinter ne gère pas le jpg, il va falloir que tu convertisses tes images en png ou gif.

    Tu peux réduire avantageusement la construction de images en :

    chemins_images = [f'E:/memories paul enzo/image{i}.jpg' for i in range(1, 19)]

    Préfère utiliser le / que le \\

    Évite aussi les caractères accentués dans tes identifiants (noms de variables, noms de fonctions, etc)  ;)

    1
  2. Phil_1857
     

    Bonjour,

    Tkinter ne gérant pas les jpg, tu peux aussi installer le module pillow

    qui permet de les afficher

    from tkinter import *
    from PIL import Image, ImageTk
    
    def display_image(img):
        graph_area.create_image(10, 10,anchor = NW, image=img)
    
    WIDTH, HEIGHT = 400, 200
    
    main_win = Tk()
    main_win.title('Test')
    main_win.geometry(str(WIDTH)+'x'+str(HEIGHT)+'+100+100')
    
    graph_area = Canvas(main_win, width = WIDTH-20, height = HEIGHT-20, bg = 'ivory')
    graph_area.place(x=10, y = 10)
    
    img = Image.open('rt_1.jpg')
    img = ImageTk.PhotoImage(img)
    display_image(img)
    
    main_win.mainloop()
    1