循环中的Python图片网格

时间:2017-12-04 15:27:50

标签: python tkinter

当我尝试使用循环

填充tkinter网格时遇到了问题
i=0
for category in categories:
    self.image = PhotoImage(file=category[2]+".png")
    imageLabel = Label(master, image=self.image)
    imageLabel.grid(row=0, column=i)
    i = i + 1

使用此代码,我尝试并排创建一个具有不同图片的行。 但它只显示了categories数组中的最后一个图像(这个数组由一个SQL-execute btw填充)。

经过一些研究后我发现,似乎python会在每次迭代时覆盖图片的引用。

所以我尝试更改代码并将引用保存在数组中:

folderPictures = []
i = 0
for category in categories:
    self.image = PhotoImage(file=category[2]+".png")
    imageLabel = Label(master, image=self.image)
    folderPictures.append(imageLabel)

for pictures in folderPictures:
        pictures.grid(row=0, column=i)
        i = +1

不幸的是,这也不起作用。我做错了什么?

谢谢和最诚挚的问候 弗朗兹

3 个答案:

答案 0 :(得分:2)

不是每次都覆盖self.image,而是为每个图像保留一个单独的引用。例如,你可以将self.image变成一个数组(self.images [0,1,...])并将每个图像保存在不同的插槽中。

答案 1 :(得分:0)

首先加载图像并列出它们,然后放入标签。

images=[] 
for category in categories:
    images.append(PhotoImage(file=category[2]+".png"))
for index,img in enumerate(images):
    Label(master,image=img).grid(row=0,column=index)

答案 2 :(得分:-1)

我保存了标签的引用而不是图片的参考。

self.image = []
for category in categories:
    self.image.append(PhotoImage(file=category[2]+".png"))
    imageLabel = Label(master, image=self.image[i])
    imageLabel.grid(row=0, column=i)
    i = i + 1

现在可以使用了!