canavas dans fonction - PhotoImage - comportement bizarre
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:
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:
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 !