On 2017-12-19 18:33, Ziggy wrote:
I have a problem with this code, it seems to work but.... first it shows
the picture then supposed to iterate through file list and shows them
each changed after 3seconds however show just the last one from list.
https://paste.pound-python.org/show/txvB4IBtlUrn3TuB0rtu/

The function called by .after should return to the tkinter's event loop. If you want to display a sequence of pictures, then the function should call .after to make it call the function again.

Here's a slightly reworked version:


import collections
import os

pictures = collections.deque()

for folder, subfolders, files in os.walk('/home/vimart/Python/img/'):
    for file in files:
        pictures.append(os.path.join(folder, file))

canvas_width = 300
canvas_height =300

master = Tk()

canvas = Canvas(master, width=canvas_width, height=canvas_height)
canvas.pack()

img = PhotoImage(file="sport.gif")
canvas.create_image(20,20, anchor=NW, image=img)

def change_img():
    canvas.delete("all")
    canvas.img = PhotoImage(file=pictures.popleft())
    canvas.create_image(20,20, anchor=NW, image=canvas.img)

    # If there's more to come, call again later.
    if pictures:
        master.after(3000, change_img)

master.after(3000, change_img)
mainloop()
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to