On 01 May 2005 10:09:56 -0700, Paul Rubin <"http://phr.cx"@nospam.invalid> wrote:
"fooooo" <[EMAIL PROTECTED]> writes:
How would I get the worker thread to open a GUI window in the main GUI
thread? After that GUI window is open, how can I send and recv messages
from/to the GUI window?

First of all the favorite Pythonic way to communicate between threads is with synchronized queues--see the Queue module. Have the worker thread put stuff on a queue and have the main GUI thread read from it.

Yea, this is a good way. Also, it is essentially what you describe below :) The Queues are just created and drained by the GUI library instead of the user's application code.


Secondly, I don't know about wxPython, but in tkinter you have to resort to a kludge in order for the gui thread to handle gui events and also notice stuff on a queue. There's a tkinter command to run some function after a specified time (say 50 msec). So you'd set that timeout to check the queue and restart the timer, which means the gui would check 20x a second for updates from the worker threads. When it got such an update, it would create a new window or whatever.

You can do better than this. Tkinter has an after_idle function, which lets you post an event to the Tkinter thread _immediately_. This is basically the Queue "put" operation.


It could be that wxPython has a cleaner way of doing this, or you might have to do something similar.

It has essentially the same thing, PostEvent().

Python thread support seems to have been something of an afterthought and there's a lot of weirdness like this to deal with.

I'm not sure what you see as weird about this.

 Jp
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to