【问题标题】:Python PIL ImageTk.PhotoImage() is giving me a bus error?Python PIL ImageTk.PhotoImage() 给我一个总线错误?
【发布时间】:2010-07-05 04:32:48
【问题描述】:

所以我在 macbook pro 上运行 python 2.6 并尝试在 python 中编写代码以在 tkinter gui 的标签中显示来自文件的图像。该图像称为 image.png。当我使用此代码时,程序运行没有错误

i = Image.open("image.png")

但是当我执行此代码时(我添加了一行):

i = Image.open("image.png")
photo = ImageTk.PhotoImage(i)

程序将崩溃并在命令行中显示“总线错误”。我什至不知道那是什么意思。我认为 PIL 安装正确,因为 Image 可以工作,但 ImageTk 不工作的事实让我感到困惑。谁能告诉我可能导致此总线错误的原因是什么?

编辑: 好吧,我制作了一个新程序来进一步测试错误。这是我运行的确切脚本:

import Image
import ImageTk

i = Image.open("image.png")
photo = ImageTk.PhotoImage(i)

现在不是得到“总线错误”,而是我的回溯。

Traceback (most recent call last):
  File "imageTest.py", line 5, in <module>
    photo = ImageTk.PhotoImage(i)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PIL/ImageTk.py", line 113, in __init__
    self.__photo = apply(Tkinter.PhotoImage, (), kw)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 3285, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 3226, in __init__
    raise RuntimeError, 'Too early to create image'
RuntimeError: Too early to create image
Exception AttributeError: "PhotoImage instance has no attribute '_PhotoImage__photo'" in <bound method PhotoImage.__del__ of <ImageTk.PhotoImage instance at 0x3c7a30>> ignored

【问题讨论】:

  • 请编辑您的问题以显示您收到的完整回溯和确切的错误消息。

标签: python image python-imaging-library bus


【解决方案1】:

ImageTk.PhotoImage 中有一个垃圾收集(引用计数)错误。您必须将对 PhotoImage 对象的引用放置在类实例变量的全局变量中(例如 self.myphoto = ImageTk.PhotoImage(i))。

看到这个警告:

http://infohost.nmt.edu/tcc/help/pubs/pil/image-tk.html

【讨论】:

【解决方案2】:

我不知道总线错误,但您需要先创建一个 Tk 窗口,然后才能调用 PhotoImage。这个脚本适合我-

import Image 
import ImageTk
from Tkinter import Tk

window = Tk()
i = Image.open("image.png") 
photo = ImageTk.PhotoImage(i)

【讨论】:

  • 好的,当我运行这段代码时,它就像一个 GUI 即将打开,然后弹出一个带有“Python 意外退出”字样的弹出窗口,并且终端窗口打印“总线错误”
  • 这篇文章可能是相关的-bytes.com/topic/python/answers/…你运行的是哪个版本的OSX?上面的代码在 Python 2.6 和 OS 10.6 中对我有用
  • 我也在运行 10.6 和 Python 2.6。那个帖子看起来可能有用,所以我会看看它。谢谢
  • 好的,我想我找到了解决问题的方法,如果我知道该怎么做的话。我觉得有这么多的内容,这需要第二个问题,所以你能看看这里,告诉我你是否知道如何做它告诉我的事情? stackoverflow.com/questions/3200308/…
【解决方案3】:

即使您确实需要调用 Tk 窗口,您也需要设置目录以便它可以找到 image.png。

import os
import Image 
import ImageTk
from Tkinter import Tk

os.chdir('C:/../../') # put file path for the image.

window = Tk()
i = Image.open("image.png") 
photo = ImageTk.PhotoImage(i)

window.mainloop()

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2022-01-10
    • 2016-06-06
    相关资源
    最近更新 更多