Tkinter GIF 动画步履蹒跚并且像素化

Posted

技术标签:

【中文标题】Tkinter GIF 动画步履蹒跚并且像素化【英文标题】:Tkinter GIF Animation falters and is pixelated 【发布时间】:2021-08-14 16:05:28 【问题描述】:

我在 After Effects 中制作了一个加载轮动画,我正在尝试在 python 中将它与 tkinter 一起使用。尽管动画是每秒 60 帧,但它会动摇并且不会显示整个帧。这是我的代码:

from tkinter import * 
from PIL import Image

root = Tk()
root.geometry("1920x1080")

image1 = Image.open("LoadingWheel.gif")
framesTotal = image1.n_frames

animation = [PhotoImage(file="LoadingWheel.gif", format=f'gif -index i') for i in range(framesTotal)]

def update(ind):
    frame = animation[ind]
    label.configure(image=frame)
    
    ind += 1
    if ind == framesTotal:
        ind = 0

    root.after(60, update, ind)

label = Label(root)
label.pack()
root.after(0, update, 0)
root.mainloop()

第一张图是我运行脚本时的截图,第二张图是它的样子!

我希望有人知道如何解决这个问题!

提前致谢!

【问题讨论】:

【参考方案1】:

使用ImageTk.PhotoImage

from tkinter import * 
from PIL import Image, ImageTk

root = Tk()
#root.geometry("1920x1080")

image1 = Image.open(r"loading.gif")
framesTotal = image1.n_frames

play_back_delay = 30
animation = []

def loadGif():
    for x in range(framesTotal):
        frame = ImageTk.PhotoImage(image1.copy())
        animation.append(frame)
        image1.seek(x)


def update(ind):
    frame = animation[ind]
    label.configure(image=frame)
    
    ind += 1
    if ind == framesTotal:
        ind = 0

    root.after(play_back_delay, update, ind)

label = Label(root)
label.pack()
loadGif()
update(0)
root.mainloop()

【讨论】:

以上是关于Tkinter GIF 动画步履蹒跚并且像素化的主要内容,如果未能解决你的问题,请参考以下文章

python——Tkinter图形化界面及threading多线程

python 图形化(Tkinter)

子类化 Tkinter.Tcl

GUI的最终选择Tkinter模块初级篇

tkinter - 使用平滑的“褪色”动画使帧向右隐藏

tkinter 06 Checkbutton 勾选项