복붙노트

[PYTHON] Tkinter로 GIF 애니메이션 재생 [duplicate]

PYTHON

Tkinter로 GIF 애니메이션 재생 [duplicate]

나는 Tkinter.PhotoImage를 사용하여 애니메이션 GIF를 재생하려했지만 어떤 성공도 보지 못했습니다. 이미지는 표시하지만 애니메이션은 표시하지 않습니다. 다음은 내 코드입니다.

root = Tkinter.Tk()
photo = Tkinter.PhotoImage(file = "path/to/image.gif")
label = Tkinter.Label(image = photo)
label.pack()
root.mainloop()

그것은 이미지를 창에 표시하고 그 것입니다. 그 문제는 Tkinter와 관련이 있다고 생각합니다. 라벨.하지만 확실하지 않습니다. 솔루션을 찾았지만 모두 PIL (Python Imaging Library)을 사용하라고 말합니다. 사용하고 싶지 않은 것입니다.

대답으로, 나는 더 많은 코드를 만들었고 (아직도 작동하지 않는다 ...), 여기있다 :

from Tkinter import *

def run_animation():
    while True:
        try:
            global photo
            global frame
            global label
            photo = PhotoImage(
                file = photo_path,
                format = "gif - {}".format(frame)
                )

            label.configure(image = nextframe)

            frame = frame + 1

        except Exception:
            frame = 1
            break

root = Tk()
photo_path = "/users/zinedine/downloads/091.gif"

photo = PhotoImage(
    file = photo_path,
    )
label = Label(
    image = photo
    )
animate = Button(
    root,
    text = "animate",
    command = run_animation
    )

label.pack()
animate.pack()

root.mainloop()

모든 것에 감사드립니다! :)

해결법

  1. ==============================

    1.Tk에서 직접 애니메이션을 운전해야합니다. 애니메이션 GIF는 하나의 파일에 여러 프레임으로 구성되어 있습니다. Tk는 첫 번째 프레임을로드하지만 이미지를 만들 때 인덱스 매개 변수를 전달하여 다른 프레임을 지정할 수 있습니다. 예 :

    Tk에서 직접 애니메이션을 운전해야합니다. 애니메이션 GIF는 하나의 파일에 여러 프레임으로 구성되어 있습니다. Tk는 첫 번째 프레임을로드하지만 이미지를 만들 때 인덱스 매개 변수를 전달하여 다른 프레임을 지정할 수 있습니다. 예 :

    frame2 = PhotoImage(file=imagefilename, format="gif -index 2")
    

    모든 프레임을 별도의 PhotoImage에로드 한 다음 타이머 이벤트를 사용하여 표시된 프레임을 전환합니다 (label.configure (image = nextframe)). 타이머 지연으로 애니메이션 속도를 제어 할 수 있습니다. 프레임 수를 초과하면 프레임을 만드는 데 실패한 것 이외에 이미지의 프레임 수를 제공하는 것은 제공되지 않습니다.

    공식 단어는 Tk 매뉴얼 페이지를 참조하십시오.

  2. ==============================

    2.다음은 객체를 만들지 않고 간단한 예제입니다.

    다음은 객체를 만들지 않고 간단한 예제입니다.

    from tkinter import *
    import time
    import os
    root = Tk()
    
    frames = [PhotoImage(file='mygif.gif',format = 'gif -index %i' %(i)) for i in range(100)]
    
    def update(ind):
    
        frame = frames[ind]
        ind += 1
        label.configure(image=frame)
        root.after(100, update, ind)
    label = Label(root)
    label.pack()
    root.after(0, update, 0)
    root.mainloop()
    
  3. from https://stackoverflow.com/questions/28518072/play-animations-in-gif-with-tkinter by cc-by-sa and MIT license