Bonjour,

Je suis débutant sur python et avec canvas.

Je cherche à faire un programme qui lorsque je clique sur mon bouton, lance la def correspondante, et dans la def, je lui dit de placer une image dans mon canvas.

Cela fonctionne lorsque le code n'est pas dans la def, l'image est donc affichée par défaut au lancement de la fenêtre Tkinter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
imagedef = Image.open("/home/pi/Documents/Ressources/preview.jpg")
resolution=(400,310)
photodef = ImageTk.PhotoImage(imagedef.resize(resolution))
canvas = Canvas(framepreview, width = 450, height = 350, bg='grey28')
canvas.create_image(26,20, anchor = NW, image=photodef)
canvas.create_text(220,175, text='Zone de prévisualisation', fill='white', font=("Arial", 15))
canvas.grid()
En revanche quand je fais l'appel par le bouton et la def preview, l'image ne s'affiche pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
def preview():
        canvas.delete("all")
        image = Image.open("/home/pi/Desktop/photo.jpg")
        resolution=(400,310)
        photo = ImageTk.PhotoImage(image.resize(resolution))
        canvas.create_image(26,20, anchor = NW, image=photo)
        canvas.create_text(120,120, text="ce texte s'affiche")
 
def stoppreview():
        canvas.delete("all")
        canvas.create_text(220,175, text='Zone de prévisualisation', fill='white', font=("Arial", 15))
Ces deux définitions sont appelées par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
btnpreview = Button(framepreview, text ='Previsualiser', command = preview).grid()
btnstoppreview = Button(framepreview, text ='Stop previsualiser', command = stoppreview).grid()
Ce que je trouve vraiment étrange, c'est que la def preview se fait bien puisque le texte s'affiche. Mais l'image non, et pas de message d'erreur.
Je ne vois pas d'où cela vient.

Merci de votre aide