Ошибка типа:> не поддерживается между экземплярами int и Label - PullRequest
0 голосов
/ 29 апреля 2019

Итак, у меня есть анимированный GIF-файл, и я получаю сообщение об ошибке

Traceback (most recent call last):
  File "Untitled.py", line 36, in <module>
    animate(last_frame,label,framelist,0)  # Start animation
  File "Untitled.py", line 4, in animate
    if frame_number > last_frame:
TypeError: '>' not supported between instances of 'int' and 'Label'

Работало, когда def был внутри основного цикла. Но мне нужно, чтобы анимационная петля была на стороне. Поэтому мне было интересно, нужно ли мне что-то сделать, чтобы преобразовать это

import tkinter as tk
def animate(frame_number,last_frame,label,framelist):
    #if the frame number is bigger than the last frame
    if frame_number > last_frame:
        frame_number = 0
        #how long each frame should last
    label.config(image=framelist[frame_number]) 
    window.after(1500, animate, frame_number+1)
#make mainwindow
window = tk.Tk()
# List to hold all the frames
framelist = [] 
# Frame index
frame_index = 0    

while True:
    try:
        # Read a frame from GIF file
        part = 'gif -index {}'.format(frame_index,fr)
        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              
    framelist.append(frame)
     # Next frame index
    frame_index += 1       


#put the gif into a label
label = tk.Label(window, bg='black')
label.grid(column = 1, row = 7)

animate(last_frame,label,framelist,0)  # Start animation
#window size
window.geometry("600x600")

#end of page
window.mainloop()

Заранее спасибо

1 Ответ

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

Похоже, что вы передаете аргументы в неправильном порядке вашей функции.

Измените эту строку:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...