Python/Tkinter crash.

Steve Holden steve at holdenweb.com
Thu Oct 5 06:40:49 EDT 2006


Hendrik van Rooyen wrote:
> "Fredrik Lundh" <fredrik at pythonware.com> wrote:
> 
>>Eric Brunel wrote:
>>
>>
>>>AFAIK, Tkinter is not thread safe. Using some kind of lock to serialize
>>>the calls from different threads may seem to work (I never tested it
>>>actually), but the safest way I found to use threads with Tkinter was to
>>>call it only from the thread where the main loop executes.
>>
>>the Tkinter binding contains some code that attempts to deal with re-
>>entrant calls, but I don't know/remember to what extent it's actually
>>supposed to work (in other words, if the observed problems are bugs or
>>just limitations).
>>
>>(maybe Martin's memory is better?)
>>
>>anyway, I usually play it safe and make sure to use a single thread to
>>deal with the UI.
>>
>></F>
> 
> 
> I must be dense - After I have called mainloop, if I have not started another
> thread to respond to events that are not generated by the user on the screen (in
> this case values of variables to display from the field generated by different
> processes - there is other hardware out there), how do I get control back to do
> the necessary updating? - I suppose I can use the call back after some time
> thingy to implement a polling loop - possibly as Russel Owen suggested - by
> polling a queue - but queues are for between threads - and I have seen here
> somewhere that sockets also want to be the main thread  - so that leaves a
> pipe - and I have had bad experiences with pipes that are unblocked, and if I
> don't unblock it, then the gui will grind to a halt....so I need a thread for
> the pipe between processes, and a queue between threads, and a time out based
> polling loop to read the queue, it seems - is it even safe to change a main loop
> variable from another thread? , or should I do it all via commands through a
> queue, implementing a whole goddam serial protocol just between threads?  and If
> I don't have another thread to do the timing for the animation bits, then I must
> base that on a timed callback too, and somehow keep state between callbacks...
> now is it ok to call widget command methods from a callback in the same thread,
> or do I have to use invoke?
> 
> My head is beginning to hurt... - what was a nice simple threaded implementation
> is turning into a spaghetti monster of timed callbacks - you thought gotos was
> bad? - you aint seen nothing yet...
> 
See if this helps:

     http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/82965

It's Jacob Hallen's description of how he solved the problem.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd          http://www.holdenweb.com
Skype: holdenweb       http://holdenweb.blogspot.com
Recent Ramblings     http://del.icio.us/steve.holden




More information about the Python-list mailing list