Bonsoir,
comme dit dans le titre, je rencontre quelques problèmes avec mon code. Je l'ai réduit au maximum pour ne garder que ce qui coince :
Le programme affiche - comme je le souhaite - un Canvas qui fait apparaître des cercles mouvants quand on clique dessus. Cependant, dans ~10% des cas (et plus particulièrement quand on spam-clic j'ai l'impression), un message d'erreur survient dans le shell :
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 from tkinter import * import time, threading class mon_canvas (Canvas) : def __init__ (self, parent) : Canvas.__init__(self, parent, width = 600, height = 600, bg = "orange") self.bind("<Button-1>",self.clic_gauche) self.pack() def clic_gauche(self, event) : self.nouveau_circle = self.create_oval(100, 100, 140, 140, fill="blue", outline="blue") self.nouveau_circle = Cercle(self, self.nouveau_circle) self.nouveau_circle.start() class Cercle (threading.Thread) : def __init__ (self, parent, cercle_id) : threading.Thread.__init__(self) self.parent = parent self.id = cercle_id def run (self) : time.sleep(.01) x = 100 while x<500 : x += 1 self.parent.coords(self.id, x, x, x+40, x+40) time.sleep(.01) root = Tk() mon_canvas(root).mainloop()
Le Thread est stoppé, et donc le cercle concerné s'immobilise.Exception in thread Thread-2: (NB : L'erreur ne concerne pas forcément ce thread)
Traceback (most recent call last):
File "C:...\Python\lib\threading.py", line 639, in _bootstrap_inner
self.run()
File "C:.../tests multithreading.py", line 25, in run
self.parent.coords(self.id, x, x, x+40, x+40)
File "C:...\Python\lib\tkinter\__init__.py", line 2264, in coords
self.tk.call((self._w, 'coords') + args))]
File "C:...\Python\lib\tkinter\__init__.py", line 2262, in <listcomp>
return [getdouble(x) for x in
ValueError: could not convert string to float: 'expected'
Je ne pense pas que c'est lié à Tkinter, mais plutôt à une mauvaise utilisation du Threading de ma part. Des idées d'où cela peut venir ?![]()
Partager