Похоже, что вы передаете аргументы в неправильном порядке вашей функции.
Измените эту строку:
animate(last_frame, label, framelist, 0)
На эту строку:
animate(0, last_frame, label, framelist)
При более внимательном рассмотрении вашего кода я заметил, что если у вас нет действительного gif
, то он будет прерываться в 1-м цикле.Если у вас есть действительный файл gif
, то вы столкнетесь с проблемой с вашим оператором after()
.
Измените свой оператор after()
следующим образом:
window.after(100, animate, frame_number+1, last_frame, label, framelist)
Здесьизменения, которые я сделал в этом, чтобы работать.Имейте в виду, что вы должны нацеливаться на действительный GIF, иначе он сорвется с самого начала.
import tkinter as tk
window = tk.Tk()
window.geometry("600x600")
framelist = []
frame_index = 0
def animate(frame_number, last_frame, label, framelist):
if frame_number > last_frame:
frame_number = 0
label.config(image=framelist[frame_number])
window.after(100, animate, frame_number+1, last_frame, label, framelist)
while True:
try:
part = 'gif -index {}'.format(frame_index)
frame = tk.PhotoImage(file='./Images/giphy.gif', format=part)
except:
last_frame = frame_index - 1
break
framelist.append(frame)
frame_index += 1
label = tk.Label(window, bg='black')
label.grid(column=1, row=7)
animate(0, last_frame, label, framelist)
window.mainloop()