tkinter test field, scrolling, threads

Eric Brunel eric.brunel at N0SP4M.com
Mon Mar 1 04:13:06 EST 2004


Bob Greschke wrote:
> I have a program where the user pushes a button, a "starting" message is
> .inserted to a text field with an associated scroll bar, a thread is started
> that inserts a "working..." message on to the end of the text field until
> stopped, or until the loop finishes.  The loop sleeps for about 3 seconds
> every time through (I'm just prototyping at this point).  The mainloop just
> waits for the user to hit the same button again which will set a flag and
> cause the thread to terminate early, otherwise it doesn't have anything to
> do.  update()'s and update_idle_tasks() get called anytime anything is
> written to the text field.  Everything works fine until the text field fills
> up then the program just freezes with no errors on the console window.  If I
> change the starting of a thread to a regular function call then everything
> works fine.
> 
> What is going wrong?

If you do not post any code, it will be difficult for anyone to help you. 
Knowing your Python and tcl/tk versions and your platform will help too.

I know that there are some issues regarding Tkinter and threads, but the 
following code works:

--text+threads.py------------------
from Tkinter import *
import time, threading

root = Tk()
t = Text(root, width=8, height=4)
t.pack(side=LEFT, fill=BOTH)
vs = Scrollbar(root, orient=VERTICAL, command=t.yview)
vs.pack(side=RIGHT, fill=Y)
t.configure(yscrollcommand=vs.set)
root.update()

def thLoop():
   i = 0
   while 1:
     t.insert(END, 'spam %s\n' % i)
     i += 1
     time.sleep(1)

th = threading.Thread(target=thLoop)
th.setDaemon(1)
th.start()

root.mainloop()
-----------------------------------

Tested with Python 2.1.1, tcl/tk 8.3.2 on Linux Mandrake 8.0
-- 
- Eric Brunel <eric dot brunel at pragmadev dot com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com




More information about the Python-list mailing list