Python TKinter 图片背景行

Python TKinter row of images background

问题: 为什么这段代码不能生成一排 5 张图像?我尝试了包、位置和网格的不同组合,但无法解决问题。我认为当前的问题是图像的背景相互重叠,但我尝试反转循环来解决问题,但没有任何改变。

代码:

import base64
try:
    # Python2
    import Tkinter as tk
    from urllib2 import urlopen
except ImportError:
    # Python3
    import tkinter as tk
    from urllib.request import urlopen
root = tk.Tk()
root.title("display a row of images")
root.geometry("%dx%d+%d+%d" % (1000, 600, 0, 0))
images = ["C20KEWS", "ANYT6mV", "b3vwblN", "7Y1MG17", "ouXXEMi"]
for image in images:
    imgbytes = urlopen("http://i.imgur.com/"+image+".gif").read()
    imgb64 = base64.encodestring(imgbytes)
    imageTK = tk.PhotoImage(data=imgb64)
    imageContainer = tk.Frame(root,
        bg="black",
        width=200,
        height=600
    )
    print images.index(image)*200, 0
    imageContainer.place(x=images.index(image)*200, y=0, width=200, height=600)
    imageLabel = tk.Label(imageContainer, image=imageTK, bg='black')
    imageLabel.pack(side=tk.LEFT)
root.mainloop()

imageTk 被覆盖,垃圾被收集。他们应该在那里展示。

保存那些 ImageTk 对象以防止出现这种情况。

root = tk.Tk()
root.title("display a row of images")
root.geometry("%dx%d+%d+%d" % (1000, 600, 0, 0))
images = ["C20KEWS", "ANYT6mV", "b3vwblN", "7Y1MG17", "ouXXEMi"]
photo_images = []  # <--------
for image in images:
    imgbytes = urlopen("http://i.imgur.com/"+image+".gif").read()
    imgb64 = base64.encodestring(imgbytes)
    imageTK = tk.PhotoImage(data=imgb64)
    photo_images.append(imageTK)  # <-----------
    imageContainer = tk.Frame(root,
        bg="black",
        width=200,
        height=600
    )
    print images.index(image)*200, 0
    imageContainer.place(x=images.index(image)*200, y=0, width=200, height=600)
    imageLabel = tk.Label(imageContainer, image=imageTK, bg='black')
    imageLabel.pack(side=tk.LEFT)
root.mainloop()