【发布时间】:2021-02-27 18:43:05
【问题描述】:
我有一个工作代码,其中 tkinter 应用程序获取 GIF 文件并在单击按钮时显示它 它适用于单个 GIF 图像。
我想要的是为 Next image 添加一个额外的按钮,当我点击它时,它应该显示下一张图片。如何创建图像列表?
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)
self.button = Button(text="Zoom out",command=self.play)
self.button.place(relx=0.4, rely=0.5, anchor=CENTER)
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()
def stop_it():
anim.after_cancel(anim.cancel)
anim = MyLabel(root,'A.gif')
anim.pack()
stop_it()
root.mainloop()
我的想法是如果我可以使用以下代码:
images = ['A.gif','B.gif']
images = iter(images)
img = next(images)
但是如何在我当前的代码中实现这一点呢?
【问题讨论】:
-
你能修正一下缩进吗?
-
你做过研究吗?这个网站上有几个关于显示图像列表的问题。
-
@TheLizzard:完成,先生
-
@BryanOakley:是的,我做到了。然而,我失败了。此代码中的逻辑略有不同,我无法在我的代码中实现它。
-
你可以使用
itertools.cycle。
标签: python tkinter tkinter-entry