Python TkInter在一个窗口中显示相邻图像的列表

Python TkInter在一个窗口中显示相邻图像的列表,python,tkinter,Python,Tkinter,我有一个文件夹的图像,我添加到一个列表和进程。在流程结束时,我希望在TkInter窗口中显示相邻的图像,目前使用我的代码,仅显示文件夹中的最后一个图像。我也只使用一个面板来显示这些图像,并将图像列表传递给panel.image方法,但我认为这样做是错误的,因为它不起作用 images = list() for item in os.listdir(mypath): image = cv2.imread(os.path.join(mypath, item)) if image is

我有一个文件夹的图像,我添加到一个列表和进程。在流程结束时,我希望在
TkInter
窗口中显示相邻的图像,目前使用我的代码,仅显示文件夹中的最后一个图像。我也只使用一个面板来显示这些图像,并将图像列表传递给
panel.image
方法,但我认为这样做是错误的,因为它不起作用

images = list()
for item in os.listdir(mypath):
    image = cv2.imread(os.path.join(mypath, item))
    if image is not None:
        if image.shape[0] > image.shape[1]:
            image = imutils.rotate_bound(image, 90)
        images.append(image)

        r = 400.0 / image.shape[1]
        dim = (400, int(image.shape[0] * r))
        resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)

        ###[Image processing]###

        imageslist = list()
        original = Image.fromarray(resized)
        original = ImageTk.PhotoImage(original)
        imageslist.append(original)

if panelA is None:

     for image in imageslist:
        panelA = Label(image=image)
        panelA.image = image
        panelA.pack(side="top", padx=10, pady=10)

else:

    for image in imageslist:

        panelA.configure(image=image)
        panelA.image = image

 root = Tk()
 panelA = None
 root.mainloop()
更新 现在,使用下面的代码,所有图像都会显示(虽然是垂直的),但是每当我点击按钮重置循环时(为了处理另一个文件夹中的图像),第一个文件夹中的第一个图像会保留在那里,而其余的图像确实来自新文件夹,这是非常奇怪的,我真的不明白为什么会发生这种情况,我破坏了面板,我检查了列表,它包含了每次循环后新文件夹中的图像,但由于某种原因,第一个图像总是放在那里

 if panelA is None:
        # the first panel will store our original image
    for image in imageslist:
        panelA = Label(image=image)
        panelA.image = image
        panelA.pack(side="top", padx=10, pady=10)

    # otherwise, update the image panels
else:
    panelA.destroy()
    for image in imageslist:
        panelA = Label(image=image)
        panelA.image = image
        panelA.pack(side="top", padx=10, pady=10)
第一个循环是这样的:

第二个循环,图像取自另一个文件夹,第一个文件夹中的第一个图像仍在顶部,该图像不在新文件夹中,并且列表在第二个循环开始时已清除,因此它不是取自imageslist:


标签的
image=
选项只接受一个图像。您可能需要使用多个标签,使用PIL将图像合并为一个,或者使用不同的小部件,例如画布或文本,可以将多个图像插入其中。好的,您将所有图像放在完全相同的位置-最多一个是可见的。Tkinter中出现空白图像的通常原因是,您仅通过局部变量引用图像,并且在函数退出时它就被垃圾收集:您发布的代码实际上是在函数中吗?如果是这样,您需要将
imageslist
存储为全局变量,或者作为某个对象或小部件的属性,只要图像可见,这些对象或小部件就会存在。为什么不直接使用
grid
?或者将包装更改为
“左”
。您可以通过更改迭代
enumerate(iterable)
并使用索引来获取列索引。您可以编写一个函数来销毁标签,并使用文件夹中的第一个图像重新创建标签。那可能行得通。你为什么要用这样的图片?我的老板刚刚路过,看到这些照片,他脸上的表情令人不快。请用更好的照片。