Bonjour,

Je suis face à un cas que je ne comprends pas.

Je cherche à afficher une image dans un canevas, le but c'est de faire une petite appli pour ranger mes photos.

Le code ci-dessous fonctionne et affiche bien mon image :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
from tkinter import *
from PIL import Image, ImageFont, ImageDraw, ImageTk 
 
fen=Tk()
cadre=Canvas(fen,width=640,height=480,bg="black")
 
cadre.pack(side=LEFT)
 
 
pilImage=Image.open("image.jpg")
im=ImageTk.PhotoImage(pilImage)
cadre.create_image(320,240,image = im)
 
 
fen.mainloop()
maintenant je voudrais associer l'affichage de l'image à une action d'un bouton :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from tkinter import *
from PIL import Image, ImageFont, ImageDraw, ImageTk 
 
fen=Tk()
 
toto={}
 
#----------- cette fonction marche, grâce au toto , pourquoi ?
 
def chargerImage(): 
    im=Image.open("image.jpg") 
    im=im.resize((640,480))
    photo = ImageTk.PhotoImage(im) 
    toto['img1'] = photo
    item = cadre.create_image(320,240,image =photo) 
    print("charger image")
    print(im.format, im.size, im.mode)
    #im.show() --> montre image dans fenetre independante
 
 
#----------- cette fonction ne fonctionne pas alors que c'est la même que dans le programme précédent.
 
def chargerImage2():
	pilImage=Image.open("image.jpg")
	im=ImageTk.PhotoImage(pilImage)
	cadre.create_image(320,240,image = im)
 
 
 
 
cadre=Canvas(fen,width=640,height=480,bg="black")
b=Button(fen,text="ON",command=chargerImage)
c=Button(fen,text="2",command=chargerImage2)
cadre.pack(side=LEFT)
 
b.pack()
c.pack()
fen.mainloop()
Je ne comprends ce que vient faire le dictionnaire toto, et pourquoi cela fonctionne avec lui... (je me suis inspiré de posts dans différents forum)

Merci d'avance !