y...@zioup.com wrote: > > I'm missing something about tkinter updates. How can I give tkinter a > chance to run? > > Here's some code: > > import time > import tkinter > import tkinter.scrolledtext > > tk = tkinter.Tk() > f = tkinter.Toplevel(tk) > st = tkinter.scrolledtext.ScrolledText(f) > st.pack() > > > > def update(): > print('updating') > st.see(tkinter.END) > tk.after(1000, update) > > > input('hit enter to start') > update() > f = open('/etc/services') > > for line in f: > st.insert(tkinter.END, line + '\n') > print('got it') > #time.sleep(5) > input('more?') > > input('finished?') > > > > > When I do this (input('more?'), it works as expected. If I comment that > line out, then the program reads the entire file, then update the window > right at the end, even if I put a sleep in there. What can I do inside the > loop to give tk a chance?
Have update() (renamed to read_more() in my code) do the reading: import sys import tkinter import tkinter.scrolledtext root = tkinter.Tk() text_window = tkinter.Toplevel() text = tkinter.scrolledtext.ScrolledText(text_window) text.pack() infile = open(sys.argv[1]) def read_more(): line = next(infile, None) if line is not None: text.insert(tkinter.END, line) root.after(100, read_more) else: text.insert(tkinter.END, "\nThat's all folks", "looney") text.tag_configure("looney", foreground="RED") text.see(tkinter.END) read_more() root.mainloop() -- http://mail.python.org/mailman/listinfo/python-list