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 崩溃的主要内容,如果未能解决你的问题,请参考以下文章