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