Tkinter and threads

B

Boman Romain

Hi everyone,
I've got problems with Tkinter and threads when using a debug version of
python.
I would like to build a "GUI thread" and an "interpreter thread" (the
classical python command line). Both threads don't interact with each other
(for now).
The GUI must be in a separate thread because the user can execute commands
that take a long time to run through the command line (and the GUI must be
available during these commands)

For example: (file: mygui.py)

import threading
import Tkinter

class RWin (threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

def run(self, *args):
self.root = Tkinter.Tk()
print 'starting Tk!'
self.root.mainloop()

bw = RWin()
bw.start()


when I load this file (import mygui), the tk window opens and everything is
OK if I use a non-debug version of python.
Otherwise (with a debug version), python_d crashes when I press a key with
this message : "Fatal python error: invalid thread state for this thread"

It seams that the problem comes from the EventHook() function defined by
tkinter. This function is called by the main thread (the interpreter)
because tkinter uses PyOS_InputHook (for managing things I don't
understand). This function calls RestoreThread() with the Tk thread state
instead of the main thread state. As the debug version checks these states,
it fails.

What is wrong? Is it impossible to have these two threads working toegether
(in a debug version of python)?


Romain
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top