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()
问题: 为什么这段代码不能生成一排 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()