Afficher une image

Résolu
Jln -  
 Jln -
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
es-tu certain de ton utilisation de root?
0
Jln
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Jln
 
Le code partagé au départ est bourré d'erreurs.
Peux-tu le corriger?
0
Jln > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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