Afficher une image

Résolu/Fermé
Jln - Modifié le 1 oct. 2021 à 19:33
 Jln - 4 oct. 2021 à 11:00
Bonjour à tous,
Je rencontre actuellement un problème avec python 3. Pour afficher une image j'ai le bout de prg suivant :
import tkinter as tk
from PIL import Image, ImageTk
fen = tk.Tk()
fen.geometry("500x300")

load = Image.open("image_1.png")
photo = ImageTk.PhotoImage(load)
label_img = tk.Label(root, image = photo)
label_img.place(x = 200, y = 10)

fen.mainloop()
Cela fonctionne très bien.

Comme je vais devoir afficher plusieurs images je me suis dis pourquoi ne pas créer une fonction, donc:

import tkinter as tk
from PIL import Image, ImageTk
fen = tk.Tk()
fen.geometry("500x300")

def affiche_image(chemin,  pos_x,  pos_y):
        load = Image.open(chemin)
        photo = ImageTk.PhotoImage(load)
        label_img = tk.Label(root, image = photo)
        label_img.place(x = pos_x, y = pos_y)

affiche_image("image_1.png",  200,  10)
fen.mainloop()

Seule la fenêtre fen s'affiche mais pas l'image....
J'ai voulu créer une classe , donc :

import tkinter as tk
from PIL import Image, ImageTk
fen = tk.Tk()
fen.geometry("500x300")

class Image:
        def __init__(self, chemin,  pos_x,  pos_y):
                self.chemin = chemin
                self.x = pos_x
                self.y = pos_y
Seule la fenêtre fen s'affiche mais pas l'image....
Quelqu'un aurait il une idée sur la raison pour laquelle l'image ne s'affiche pas.
Merci
Cordialement

        def affiche_image():
                load = Image.open(self.chemin)
                photo = ImageTk.PhotoImage(load)
                label_img = tk.Label(root, image = photo)
                label_img.place(x = self.x, y = self.y)


aff_img = Image("image_1.png",  200,  10)
aff_img.affiche_image()

fen.mainloop()




Configuration: Windows / Chrome 94.0.4606.61


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

yg_be Messages postés 23184 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 septembre 2024 Ambassadeur 1 533
1 oct. 2021 à 21:09
bonjour,
es-tu certain de ton utilisation de root?
0
Bonjour,
Merci d'avoir pris le temps de répondre.
Oui bien vu j'ai tapé root mais en fait il s'agit bien de fen ,mais même après correction je n'obtiens pas le résultat souhaité (c'est à dire affichage de l'image).
Merci
Cordialement.
0
yg_be Messages postés 23184 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 septembre 2024 1 533
Modifié le 2 oct. 2021 à 19:04
je n'ai pas testé avec la classe.
j'ai testé avec la fonction.
cela fonctionne ainsi:
def affiche_image(chemin,  pos_x,  pos_y):
        load = Image.open(chemin)
        photo = ImageTk.PhotoImage(load)
        label_img = tk.Label(fen, image = photo)
        label_img.place(x = 200, y = 10)
        label_img.pour_eviter_bug=photo
0
Jln > yg_be Messages postés 23184 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 septembre 2024
3 oct. 2021 à 10:55
Bonjour,
Merci pour la réponse, ça fonctionne avec l'ajout de la dernière ligne (label_img.pour_eviter_bug=photo), dans la fonction .
Par contre en ajoutant cette ligne dans la classe j'ai une erreur :
File "C:\Python\ExoPython\test_image.py", line 196, in affiche_image
load = Image.open(self.chemin)
AttributeError: type object 'Image' has no attribute 'open'
Je ne vois pas ce qui provoque cette erreur, avez vous une idée ?
Merci, bon dimanche.
Cordialement.
0
yg_be Messages postés 23184 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 septembre 2024 1 533 > Jln
3 oct. 2021 à 11:06
Le code partagé au départ est bourré d'erreurs.
Peux-tu le corriger?
0
Jln > yg_be Messages postés 23184 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 septembre 2024
4 oct. 2021 à 11:00
Bonjour,
A part l'erreur concernant la fenêtre je ne vois pas ou le code est bourré d'erreur.
Vu que cela fonctionne avec la fonction en ayant remplacé ( root par fen) et placé la dernière
ligne que vous avez indiqué je vais utiliser la fonction tant pis pour la classe.
Merci
Cordialement
0