Python 如何维护PhotoImage对象的多个引用

Python 如何维护PhotoImage对象的多个引用,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我试图在我的文本小部件中显示两个图像对象。最初,两个对象都显示为空图像。经过一些研究,我了解到我需要保留对图像的引用。我在代码中增加了一行。我现在看到第二张图像显示正确,但是第一张图像仍然是空白的 我怀疑我的“引用”在for循环中被过度写入。是这样吗?如果是这样,如果我需要在文本小部件中显示多个图像对象,我将如何维护多个引用 以下是我目前的代码: from Tkinter import * from PIL import Image, ImageTk import os class TestA

我试图在我的文本小部件中显示两个图像对象。最初,两个对象都显示为空图像。经过一些研究,我了解到我需要保留对图像的引用。我在代码中增加了一行。我现在看到第二张图像显示正确,但是第一张图像仍然是空白的

我怀疑我的“引用”在for循环中被过度写入。是这样吗?如果是这样,如果我需要在文本小部件中显示多个图像对象,我将如何维护多个引用

以下是我目前的代码:

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()

是的,您的引用正在被覆盖

最简单的方法可能是将引用添加到列表中。例如:

class TestApp:
    def __init__(...):
        ...
        self.images = []
        ...
        for name in image_names:
            ...
            img_obj = ImageTk.PhotoImage(img)
            self.images.append(img_obj)

这是有道理的。谢谢:)