Hello Nemes: The issue with the code as written is that the infinite while loop begins execution before the root.mainloop() ever gets called (so root.mainloop never gets called....).
To start the animation AFTER the root.mainloop() call, I've moved the animation work into a function and used the after method to call that function after the mainloop initiates. Also, instead of using a while loop with a sleep call (which hangs the program while waiting), I've changed the animation function to call itself each time it finishes. This way the program doesn't hang while animating the picture, which is useful if you want this to be part of a larger program. Hope this is helpful! Dave Giesen #Working on window interface of soundAsleep #Tkinter will handle the GUI from Tkinter import * root = Tk() root.title("soundAsleep beta") frame=[] #Importing the images. They are named w1.gif, w2.gif...w7.gif for i in range(1,7): fname="core/working/w"+str(i)+".gif" frame+=[PhotoImage(file=fname)] wrap = Canvas(root, width=200, height=120) wrap.pack() def do_animation(currentframe): def do_image(): wrap.create_image(100,70,image=frame[currentframe], tag='ani') # Delete the current picture if one exists wrap.delete('ani') try: do_image() except IndexError: # End of image list reached, start over at the first image - works for an arbitrary number of images currentframe = 0 do_image() wrap.update_idletasks() #Force redraw currentframe = currentframe + 1 # Call myself again to keep the animation running in a loop root.after(5000, do_animation, currentframe) # Start the animation loop just after the Tkinter loop begins root.after(10, do_animation, 0) root.mainloop() David J. Giesen | Research Scientist | FPEG US Display OLED Materials R+D | Eastman Kodak Company | 2/83/KRL MC02216 | Rochester, NY 14650 | david.gie...@kodak.com | 1-585-588-0480 Office | www.kodak.com From: Nemes Andrei <teh_sh_meis...@yahoo.com> To: tkinter-discuss@python.org Date: 12/22/2009 10:47 AM Subject: [Tkinter-discuss] Animation using image sequence Sent by: tkinter-discuss-bounces+david.giesen=kodak....@python.org Hi! I'm trying to make an animation using a sequence of gif images and the canvas widget, but all I see when I compile is a black screen. What I'm trying to do is delete the previous image and create the next one each frame. Am I doing it wrong? Is it do-able at all? Help would be greatly appreciated. Thank you. #Working on window interface of soundAsleep #Tkinter will handle the GUI from Tkinter import * import time root = Tk() root.title("soundAsleep beta") frame=[] currentframe=0 #Importing the images. They are named w1.gif, w2.gif...w7.gif for i in range(1,7): fname="core/working/w"+str(i)+".gif" frame+=[PhotoImage(file=fname)] wrap = Canvas(root, width=200, height=120) wrap.pack() #trying to make the animation while True: ani=wrap.create_image(100,70,image=frame[currentframe]) time.sleep(5) wrap.update_idletasks() #Force redraw wrap.delete(ani) if (currentframe==5): currentframe=0 else: currentframe+=1 root.mainloop() _______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss
<<image/gif>>
_______________________________________________ Tkinter-discuss mailing list Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss