Python tkinter中的GIF小故障
我创建了一个内置gif的GUI应用程序。然而,在工作过程中,gif开始出现故障Python tkinter中的GIF小故障,python,tkinter,pycharm,Python,Tkinter,Pycharm,我创建了一个内置gif的GUI应用程序。然而,在工作过程中,gif开始出现故障 from tkinter import * import time import os root = Tk() frames = [] for i in range(61): frames.append(PhotoImage(file='bell.gif', format='gif -index ' + str(i))) def update(ind): try: frame =
from tkinter import *
import time
import os
root = Tk()
frames = []
for i in range(61):
frames.append(PhotoImage(file='bell.gif', format='gif -index ' + str(i)))
def update(ind):
try:
frame = frames[ind]
except IndexError:
ind = 1
frame = frames[ind]
ind += 1
label.configure(image=frame, bg="white")
label.pack()
root.after(100, update, ind)
label = Label(root, bg="white")
root.after(100, update(1))
root.mainloop()
这是原始gif:
最后会发生什么:
更新
您必须在包装和作品中加入枕头。
找到另一条路
from tkinter import *
from PIL import Image, ImageTk
class MyLabel(Label):
def __init__(self, master, filename):
im = Image.open(filename)
seq = []
try:
while 1:
seq.append(im.copy())
im.seek(len(seq)) # skip to next frame
except EOFError:
pass # we're done
try:
self.delay = im.info['duration']
except KeyError:
self.delay = 100
first = seq[0].convert('RGBA')
self.frames = [ImageTk.PhotoImage(first)]
Label.__init__(self, master, image=self.frames[0])
temp = seq[0]
for image in seq[1:]:
temp.paste(image)
frame = temp.convert('RGBA')
self.frames.append(ImageTk.PhotoImage(frame))
self.idx = 0
self.cancel = self.after(self.delay, self.play)
def play(self):
self.config(image=self.frames[self.idx])
self.idx += 1
if self.idx == len(self.frames):
self.idx = 0
self.cancel = self.after(self.delay, self.play)
root = Tk()
anim = MyLabel(root, 'bell.gif')
anim.pack()
root.mainloop()
您从
update
内部对ind
所做的更改将丢失。请参阅@Mark:它们没有丢失,因为更新后的值在该函数末尾调用root.after()
时作为参数传递。Doggy4:您的代码看起来基本正常。我认为问题与您使用的GIF图像有关,因此我建议尝试另一种。有一个叫做“小全球”,你可以从中得到。当我使用它而不是您的bell.gif
,没有问题。问题解决了。安装枕头包如果您使用pycharm,请使用枕头包