Python 使用PIL在Tkinter画布小部件中嵌入图像
我正在尝试使用PIL将图像嵌入Tkinter画布中,但由于某些原因,它没有显示。有什么想法吗 没有错误或警告。只是一个空白的Tk窗口 我的代码:Python 使用PIL在Tkinter画布小部件中嵌入图像,python,image,embed,tkinter,python-imaging-library,Python,Image,Embed,Tkinter,Python Imaging Library,我正在尝试使用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 = T
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()
我猜图像正在被垃圾收集。尝试保存对“i”的引用(例如:self.image=i)@Bryan Oakley这也是我的问题所在。你怎么知道的?为什么图像会被如此迅速地垃圾收集,即使在下一行有对它的引用?
self.
有什么区别?@theJollySin:self
的区别在于,没有它,i
是一个局部变量。当该函数结束时,i
可能会被垃圾收集。使用self
,对象的生命周期中存在引用。@BryanOakley:这很奇怪,因为这意味着ImbImage.create\u image()
调用不会创建对图像的引用。我想这是出乎意料的。@MartijnPieters:你是对的:ImbImage.create_image()
不会创建对图像对象的引用。它只是告诉底层的tcl/tk解释器将图像放在画布上。tcl/tk解释器和画布不了解python对象。