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 :

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 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 :

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'
Le Thread est stoppé, et donc le cercle concerné s'immobilise.
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 ?