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.
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 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()
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)
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()
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.
Partager