ImageTk.PhotoImage 崩溃

Posted

技术标签:

【中文标题】ImageTk.PhotoImage 崩溃【英文标题】:ImageTk.PhotoImage Crash 【发布时间】:2011-09-03 01:55:19 【问题描述】:

我一直在尝试使用 PIL 调整图像大小,然后使用 Tkinter 显示它们,但程序一直在崩溃,我已将问题隔离到下面的第二行:

image = Image.open("0.gif")
photo = ImageTk.PhotoImage(image)

这是我的进口:

from Tkinter import * 
from PIL import Image, ImageTk 

我读过 Tk 必须被初始化,我在程序中执行此操作,然后它到达程序中的那些行。所以我不知道它是什么。

我在 Eclipse 上运行 OSX 和 python 2.7 解释器(使用 PyDev)。

更新:

eclipse 上的错误信息说:

STACK: Stack after current is in use

【问题讨论】:

您应该发布错误消息。 好主意,现在就在上面! gif 文件 is 与您的脚本在同一目录中,不是吗?否则,您需要提供完整路径。 您是否有机会实际发布整个源代码(或者更好的是,发布最小的复制),以便我们更轻松地诊断出您缺少什么? @VictorMota 你解决过这个问题吗?如果您愿意,您是否介意回答您自己的问题并接受它。 【参考方案1】:

我一直在为当前项目使用 Tk、PIL 和调整图像大小,以下代码对我来说很好。

#Imports
from Tkinter import * 
from PIL import Image, ImageTk 

#Create Tk instance
root = Tk()

#Open image and resize
image = Image.open("path/to/image/file").resize((400,400), Image.ANTIALIAS)
photo = ImageTk.PhotoImage(image)

之后,我发现像这样在 tkinter 中将图像显示为标签最容易。

image_label = Label(root, width = 400, height = 400, image = photo bd = 0)

(我喜欢bd = 0,否则我会在图像周围出现细白边框。) 希望这对您有所帮助。祝你好运! 埃德

【讨论】:

【参考方案2】:

所以这是一个古老的问题,但如果有人偶然发现这个问题(就像我刚才所做的那样),错误消息来自 Tcl (tclExecute.c)。我不知道是什么触发了它,但值得一试的是在调用PhotoImage 之前创建一个Tk 实例:

root = Tk()
image = Image.open("0.gif")
photo = ImageTk.PhotoImage(image)

【讨论】:

如果您不知道是什么触发了错误,请不要猜测解决方案。另外,最初的问题说 tk 正在被初始化,所以你建议他们做一些他们已经在做的事情(“我已经读过 Tk 必须被初始化,我在程序到达那些行之前这样做” ) 我没有看到其他人提到错误消息的来源,但如果将其标记为无用让您感觉更好,请成为我的客人。【参考方案3】:

在使用 tkinter 之前,我已经看到了该错误。我认为这与旧版本的 tkinter 有关。我更新了我的 python 版本和 tkinter 版本,它消失了。当您在不同的 OS/计算机/平台/Python 版本上运行代码时,是否会发生此错误?您使用的是什么版本的 tkinter?一些谷歌搜索显示了这两个页面,它们在使用 tkinter 时描述了相同的错误......

http://osdir.com/ml/python.leo.general/2008-03/msg00060.htmlhttp://fornax.phys.unm.edu/lwa/trac/ticket/3

我看不到您的所有代码,但我敢打赌您的代码不一定有任何问题。以下代码对我有用...

from Tkinter import * 
from PIL import Image, ImageTk 

# resize image with PIL
im = Image.open('path to gif')
resized_im = im.resize((400,400,),Image.ANTIALIAS)

# display image in tkinter window
window = Tk()
tk_im = ImageTk.PhotoImage(resized_im)
window.geometry('%dx%d' % (resized_im.size[0],resized_im.size[1]))
label_image = Label(window, image=tk_im)
label_image.place(x=0,y=0,width=resized_im.size[0],height=resized_im.size[1])
window.mainloop()

使用.... ubuntu 10.04 64 位 蟒蛇 2.6.5 python-imaging-tk 1.1.7 python-tk 2.6.5(使用 tkinter 8.5.0 版) python 成像库 (PIL) 1.1.7 日食 3.7.1 pydev 2.5.0.2012050419

祝你好运!

【讨论】:

以上是关于ImageTk.PhotoImage 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Python 3.x 中的 PIL ImageTk 等效项

在 python 3 上使用 tkinter 打开图像

在 Tkinter Python 程序中看不到图片

有没有一种基于是否有人按下按钮(tkinter)的条件语句的方法

在 Tkinter 中调整 PIL 中的图片大小

如何更新 Tkinter 标签小部件的图像?