【问题标题】:Embedding an Image in a Tkinter Canvas widget using PIL使用 PIL 在 Tkinter Canvas 小部件中嵌入图像
【发布时间】:2011-06-18 07:48:02
【问题描述】:

我正在尝试使用 PIL 在 Tkinter 画布中嵌入图像,但由于某种原因它没有显示。有任何想法吗?

没有错误或警告。只是一个空白的 Tk 窗口。

我的代码:

import Tkinter
from PIL import ImageTk, Image


class image_manip(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)

        self.ImbImage = Tkinter.Canvas(self)
        self.ImbImage.pack()

        i = ImageTk.PhotoImage(Image.open('test.png'))
        self.ImbImage.create_image(0, 0, image=i)

def run():
    image_manip(None).mainloop()
if __name__ == "__main__":
    run()

【问题讨论】:

    标签: python image embed tkinter python-imaging-library


    【解决方案1】:

    我的猜测是图像正在被垃圾收集。尝试保存对“i”的引用(例如:self.image=i)

    【讨论】:

    • @Bryan Oakley 这也是我的确切问题。你怎么知道?为什么图像会如此迅速地被垃圾收集,即使在下一行有对它的引用? self. 有什么不同?
    • @theJollySin:self 的不同之处在于,没有它,i 是一个局部变量。当该函数结束时,i 可能会被垃圾回收。使用self,引用在对象的整个生命周期内都存在。
    • @BryanOakley:这令人惊讶,因为这意味着 ImbImage.create_image() 调用确实创建对图像的引用。我猜这是出乎意料的。
    • @MartijnPieters:你是对的:ImbImage.create_image() 不会创建对图像对象的引用。它只是告诉底层 tcl/tk 解释器将图像放在画布上。 tcl/tk 解释器和画布不知道 python 对象。
    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2021-11-05
    • 2020-04-19
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多