Tkinter and threads

Boman Romain r_boman at yahoo.fr
Tue May 4 11:19:02 EDT 2004


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





More information about the Python-list mailing list