【问题标题】:ImageTk.PhotoImage CrashImageTk.PhotoImage 崩溃
【发布时间】: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 你解决过这个问题吗?如果您愿意,您是否介意回答您自己的问题并接受它。

标签: python tkinter python-imaging-library


【解决方案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.html
    http://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

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2016-01-31
      • 2012-02-26
      • 2022-11-02
      • 1970-01-01
      • 2011-11-22
      • 2021-05-14
      • 1970-01-01
      • 2016-11-09
      • 2018-12-11
      相关资源
      最近更新 更多