如何将PIL与Tkinter一起使用?

时间:2009-08-06 01:25:28

标签: python python-imaging-library tkinter

在使用PIL加载图像并将其显示在由Tkinter创建的窗口中时,我遗漏了一些非常基本的内容。我想要做的最简单的形式是:

import Tkinter as TK
from PIL import Image, ImageTk

im = Image.open("C:\\tinycat.jpg")
tkIm = ImageTk.PhotoImage(im)
tkIm.pack()
TK.mainloop()

当我尝试运行上面的代码时,我得到以下内容:

RuntimeError: Too early to create image
Exception AttributeError: "PhotoImage instance has no attribute 
'_PhotoImage__photo'" in <bound method PhotoImage.__del__ of 
<PIL.ImageTk.PhotoImage instance at 0x00C00030>> ignored

我已经确认该文件存在,可以在图像编辑器中打开,也可以使用im.show()显示。我错过了什么?

2 个答案:

答案 0 :(得分:6)

在调用ImageTk.PhotoImage()之前必须实例化Tkinter:

TK.Tk()

答案 1 :(得分:-1)

Meredith说你需要添加那条线肯定是真的!

我想向您展示我的图片格式,然后将其与您的图片进行比较,看看是否有任何不同,我的图片代码是

master.image = PhotoImage(file="Banditlogo.gif")
w = Label(master, image=master.image)
w.photo = master
w.pack()

你的代码是

im = Image.open("C:\\tinycat.jpg")
tkIm = ImageTk.PhotoImage(im)
tkIm.pack()

我们都在使用PIL和PhotoImage 我不禁疑惑这两种方式都是正确的吗? 在这个时间点,我没有足够的知识来完全回答你的PIL问题,但比较两个代码是有趣的,因为它们是不同的。我只能建议做我所做的事情,当涉及到人们与我分享的示例代码时,那就是“如果我的工作不起作用,请尝试示例代码并查看是否修复了代码”当我发现有效的东西时,我会坚持下去用它。

对Tkinter有更多了解的人请解释一下,如何使用PIL与Tkinter的工作方式?

知识就是力量所以请分享。