【问题标题】:Creating list of images in tkinter在 tkinter 中创建图像列表
【发布时间】: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


【解决方案1】:

可能有很多方法可以制作图像列表,但我会这样:


# images 
img1 = ImageTk.PhotoImage(Image.open("a.gif"))
img2 = ImageTk.PhotoImage(Image.open("b.gif"))
img3 = ImageTk.PhotoImage(Image.open("c.gif"))

# a list of images 
Image_list = [img1 , img2 , img3 ]

为了迭代,我会做一个计数器之类的东西


counter = len(Image_list)

img_panel = Label(root , image = Image_list[counter] ) 
img_panel.pack()

def next_image():
    counter-=1
    img_panel = Label(root , image = Image_list[counter] ) 
    img_panel.pack()

next_image = Button(root , text= "next image" , command =next_image)
next_image.pack()

【讨论】:

  • 感谢您的回答。但是,我仍然在努力将它融入我的代码:(
猜你喜欢
  • 1970-01-01
  • 2023-01-27
  • 2020-09-18
  • 1970-01-01
  • 2016-01-17
  • 2015-08-16
  • 2019-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多