On Wed, 30 Apr 2008 20:19:32 +0200, blaine <[EMAIL PROTECTED]> wrote:
On Apr 30, 10:41 am, Peter Otten <[EMAIL PROTECTED]> wrote:
blaine wrote:
> Still doesn't work. I'm looking into using wx instead...
> This is the full code - does it work for anyone else? Just do a echo
> 'line 0 0 10 10' > dev.file
Haven't tried it, but I think that the problem is that you are updating
the
UI from the "readthread". A good example to model your app after is
here:
http://effbot.org/zone/tkinter-threads.htm
Peter
Update: Not only is that a good model, its exactly what I'm trying to
do. Thanks again!
BTW, instead of reading the queue periodically, you can also use the event
loop for that: in the secondary thread, generate a custom event using the
event_generate method. Custom events are enclosed in '<<...>>', the '...'
can be whatever you like. Be sure to generate the event with the
when='tail' option or the event might get handled immediatly. To treat the
event, do a binding on it: it will be called in your main thread. It's a
common trick to switch threads so that GUI events are treated in the main
thread and not in secondary ones.
Example:
------------------------------------------
import threading
import time
import Queue
from Tkinter import *
root = Tk()
q = Queue.Queue()
def thread_action():
i = 1
while 1:
time.sleep(1)
q.put(i)
root.event_generate('<<Ping>>', when='tail')
i += 1
v = StringVar()
def ping_received(event):
v.set(q.get())
Label(root, textvariable=v, width=10).pack()
root.bind('<<Ping>>', ping_received)
th = threading.Thread(target=thread_action)
th.setDaemon(1)
th.start()
root.mainloop()
------------------------------------------
HTH
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
--
http://mail.python.org/mailman/listinfo/python-list