我正在尝试在“文本”小部件中显示两个图像对象。最初,两个对象都显示为空图像。经过一些研究,我了解到我需要保留对图像的参考。我在代码中添加了一行。我现在看到第二张图像显示正确,但第一张图像仍为空白。
我怀疑我的“引用”在for循环期间被覆盖了。是这样的吗?如果是这样,如果我需要在Text小部件中显示多个图像对象,我将如何维护多个引用?
到目前为止,这是我的代码:
from Tkinter import *
from PIL import Image, ImageTk
import os
class TestApp:
def __init__(self, parent):
self.myParent = parent
self.main_container = Frame(parent)
self.main_container.pack()
self.text_box = Text(self.main_container, height=50, width=80)
self.text_box.pack()
image_names = ['img1.jpg', 'img2.jpg']
for name in image_names:
img = Image.open(os.getcwd() + '\\' + name)
img_obj = ImageTk.PhotoImage(img)
self.text_box.image_create(INSERT, image=img_obj)
self.text_box.insert(END, "\n")
# Added this extra reference
self.text_box.image = img_obj
root = Tk()
root.title("This is a test app")
mainapp = TestApp(root)
root.mainloop()
答案 0 :(得分:2)
是的,你的引用被覆盖了。
最简单的方法是将引用添加到列表中。例如:
class TestApp:
def __init__(...):
...
self.images = []
...
for name in image_names:
...
img_obj = ImageTk.PhotoImage(img)
self.images.append(img_obj)