Я использую следующий код для анимации GIF-файлов на tkinter.
class gif:
def __init__(self,filename):
fIndex = 0
global frames
frames = []
global lastFrame
while True:#infinite loop
try:#executes following code if possible
part = 'gif -index {}'.format(fIndex)#takes an index of a frame of gif
frame = PhotoImage(file=filename,format=part)
print(str(fIndex))
#converts each frame to a PhotoImage
except:#once the last frame is reached, this is executed
lastFrame = fIndex - 1#last frame index saved
break #while loop ends
frames.append(frame) #photoimage of frame added to list
fIndex += 1 #index incremented
def animate(self,fNumber):#function to animate gif
if fNumber > lastFrame: #if the last frame is reached,
fNumber = 0 #index changed to 0 so it plays again
canvas.create_image(700,350,image=frames[fNumber],anchor=CENTER)
master.after(20,self.animate,fNumber+1)#each frame played with
#20 milliseconds in between
matr1x = gif('spinningmatrix.gif')
matr1x.animate(0)
это работает для некоторых из моих GIF-файлов, но не для всех. Для тех, которые не работают, когда я печатаю fIndex, он отображает только 0 и 1, и только первый кадр отображается на GUI. те, которые работают, имеют больше индексов. просто интересно, почему некоторые не работают и почему это дает мне только 0 и 1 в качестве индексов. любая помощь будет оценена. редактировать: я разделил GIF-файлы на фреймы онлайн, и для 2 из GIF-файлов, которые работают должным образом, моя программа дает правильное количество кадров. для одного, который работает, но немного выключен, программа говорит 3 кадра, но онлайн говорит 20. для других 2, которые вообще не работают, количество кадров сильно отличается в сети.