Код tkinter анимирует некоторые картинки, но не все - PullRequest
0 голосов
/ 21 января 2020

Я использую следующий код для анимации 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, которые вообще не работают, количество кадров сильно отличается в сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...