Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mtTkinter doesn't terminate threads

I need to run some simple function in multi-threading with a Tkinter GUI, so I've tried mtTkinter.

Everything works fine except for a particular: even if I just start the GUI and then I close it without touching nothing some thread keeps running.

In other words; I have this code:

from Tkinter import *
root = Tk()

#simple GUI code with buttons, labels, text and scrollbars widget
...
...    
root.mainloop()

If I run this code the GUI appears and when I close it this python script ends successfully.

Now if I replace Tkinter with mtTkinter

from mtTkinter import *
root = Tk()

#simple GUI code with buttons, labels, text and scrollbars widget
...
...    
root.mainloop()

the GUI appears once again, but if I close it there is still some thread from mtTkinter that keeps running!

Any help would be apprecied, thank you in advance and sorry for my bad english!

like image 955
user1726963 Avatar asked Dec 28 '12 17:12

user1726963


2 Answers

I ran into a similar problem for my application (https://github.com/joecole889/spam-filter). After some investigation, I realized that when I close my application Tkinter (or possibly Matplotlib) uses a threading._DummyThread instance to delete one of the widgets. I have a Matplotlib graph in a Tkinter canvas widget in my application. In any case, it looks like an “image delete” event is added to the event queue and mtTkinter blocks waiting for a response on the responseQueue that never comes.

I was able to fix the problem by allowing events from instances of threading._DummyThread to run without going through the queue infrastructure of mtTkinter. That is, I changed:

if threading.currentThread() == self._tk._creationThread:

to

if (threading.currentThread() == self._tk._creationThread) or \
   isinstance(threading.currentThread(), threading._DummyThread) :

Things seem to be working for me now...hope this helps!

like image 192
Joe Cole Avatar answered Nov 17 '22 19:11

Joe Cole


I've "resolved" not using it. mTkinter seems to be a bit buggy.

like image 37
user1726963 Avatar answered Nov 17 '22 18:11

user1726963