Нужно убрать цикл - PullRequest
       5

Нужно убрать цикл

2 голосов
/ 30 апреля 2019

У меня есть анимированный GIF, работающий в цикле while навсегда, но я просто хочу, чтобы GIF запускался один раз.

Я попытался удалить цикл while, но затем я получил last_frame not define.

import tkinter as tk
def animate(frame_number, last_frame, label, framelist,window):
    #if the frame number is bigger than the last frame
        if frame_number > last_frame:

            #set frame number to 0
            frame_number = 0

        #configure the impage in to a list
        label.config(image=framelist[frame_number])

        #change the frame after how many seconds
        window.after(1500, animate, frame_number+1, last_frame, label, framelist,window)
#make mainwindow
window = tk.Tk()

# List to hold all the frames
framelist = []

    # Frame index set to 0
frame_index = 0
        #if true
while True:
    try:
        #Read a frame from GIF file
        part = 'gif -index {}'.format(frame_index)
        #import the gif 
        frame = tk.PhotoImage(file='giphy.gif', format=part)
    except:

        # Save index for last frame
        last_frame = frame_index - 1

        # Will break when GIF index is reached
        break

    # Next frame index
    framelist.append(frame)

    #add one to make the gif going
    frame_index += 1
#put the gif into a label
label = tk.Label(window, bg='black')
label.grid(column=1, row=7)

# Start animation
animate(0, last_frame, label, framelist, window)

    #window size
window.geometry("600x600")#winwindow.geometry("600x600")

#end of window
window.mainloop()

Я просто хочу, чтобы GIF запускался один раз.Заранее спасибо.

1 Ответ

0 голосов
/ 30 апреля 2019

Как правило, рекомендуется не использовать циклы с tkinter, поскольку он обрабатывается mainloop().

Читайте здесь: https://stackoverflow.com/a/24131612/10520989

Лучшим решением было бы сделать рекурсивную функцию с.after()

import tkinter as tk

master = tk.Tk()

def my_mainloop():
    print "Hello World!"
    master.after(1000, my_mainloop)    

master.after(1000, my_mainloop)

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