Chris Hare wrote: > The scenario is this: > > I want to loop around all of the images in a given directory (which I know > will be images, but I guess I should check), show an image in a window, > wait 2 seconds and show the next one and repeat that indefinitley, which > will be until the user closes the window. > > This is the code I extracted from the larger program and made work - sort > of - in a standalone fashion. When I run the code, each of the file names > gets displayed, and I can view the images, so it has to be something I am > doing wrong with this chunk of code. > > However, I don't see what the problem is.
I have not looked at your code in detail, but event loops and time.sleep() don't play together very well. Use after(delay_in_milliseconds, callable) instead. Here's a simple example that loops over images passed from the command line: import Image import ImageTk import os import sys import Tkinter as tk from itertools import cycle def next_image(): imagefile = next(imagefiles) image = Image.open(imagefile) w, h = image.size image = image.resize((700, 700*h//w)) label.image = label["image"] = ImageTk.PhotoImage(image=image) root.title("Now showing %s" % os.path.basename(imagefile)) root.after(2000, next_image) if __name__ == "__main__": imagefiles = sys.argv[1:] assert imagefiles imagefiles = cycle(imagefiles) root = tk.Tk() label = tk.Label(root) label.pack() root.after_idle(next_image) root.mainloop() -- http://mail.python.org/mailman/listinfo/python-list