Tkinter / image jpg

SWBxdy - Modifié le 14 mai 2024 à 11:27
 Phil_1857 - 8 mai 2024 à 10:28

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

A voir également:

2 réponses

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

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