【问题标题】:How to maintain multiple references for PhotoImage objects如何维护 PhotoImage 对象的多个引用
【发布时间】:2013-04-11 15:12:32
【问题描述】:

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

我怀疑我的“参考”在 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()

【问题讨论】:

    标签: python python-2.7 tkinter


    【解决方案1】:

    是的,您的参考文献正在被覆盖。

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

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

    【讨论】:

    • 这是有道理的。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多