Bonjour à toutes et à tous!


Je fais face à un comportement que je ne comprends pas...

Voici un premier exemple. On y crée une fenêtre root (gris foncé), une frame (orange) et un canvas (noir). Ensuite on dessine un rectangle gris clair à l'intérieur du canvas. Je passe par une image car le but est de sauver le tout au format jpeg.

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
 
from tkinter import *
from PIL import Image, ImageDraw, ImageTk
 
root = Tk()
root.resizable(False, False)
root.geometry("600x600+0+0")
root.configure(background="#454545")
 
the_frame = Frame(root)
the_frame.pack(side=LEFT)
 
cnv = Canvas(the_frame, width=400, height=400, bg='RED')
cnv.pack()
 
pil_image = Image.new("RGB", (300, 300))
draw = ImageDraw.Draw(pil_image)
 
draw.rectangle((0, 0, 100, 100), fill=(125, 125, 125))
image_tk = ImageTk.PhotoImage(pil_image)
 
cnv.create_image(0, 0, anchor=NW, image=image_tk)
cnv.update()
 
root.mainloop()
On reprend exactement la même structure, mais cette fois, on isole le dessin du rectangle gris clair et son chargement dans le canvas dans une fonction test():
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
 
from tkinter import *
from PIL import Image, ImageDraw, ImageTk
import time
 
def test():
    draw.rectangle((0, 0, 100, 100), fill=(125, 125, 125))
    image_tk = ImageTk.PhotoImage(pil_image)
 
    cnv.create_image(0, 0, anchor=NW, image=image_tk)
    cnv.update()
    time.sleep(5)
 
 
root = Tk()
root.resizable(False, False)
root.geometry("600x600+0+0")
root.configure(background="#454545")
 
the_frame = Frame(root)
the_frame.pack(side=LEFT)
 
cnv = Canvas(the_frame, width=400, height=400, bg='RED')
cnv.pack()
 
pil_image = Image.new("RGB", (300, 300))
draw = ImageDraw.Draw(pil_image)
 
test()
 
root.mainloop()
Et là, surprise (pour moi en tout cas), au bout des 5 secondes du timer, le canvas noir et son rectangle gris clair disparaissent(si on n'ajoute pas de timer, on a à peine le temps de voir le canvas et le rectangle)

Je vous avoue que je n'ai pas la moindre idée de ce qui cause ce comportement étrange...

Merci d'avance à celles et ceux qui pourraient m'aider à y voir plus clair.