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

时间:2017-05-30 15:09:28

标签: python tkinter

我有一个图像文件夹,我将其添加到列表和进程中。在这个过程的最后,我想在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)

这是它的样子,第一次循环:

first loop

第二个循环,图像从另一个文件夹中获取,第一个文件夹中的第一个图像仍然位于顶部,该图像不在新文件夹中,并且列表已在第二个循环开始时被清除,因此不会拍摄来自imageslist:

second loop

0 个答案:

没有答案