7

だから私はmacbook proでpython 2.6を実行していて、tkinter guiのラベルにあるファイルから画像を表示するためにpythonでコードを書き込もうとしています。イメージは image.png と呼ばれます。このコードを使用すると、プログラムはエラーなしで実行されます

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

しかし、このコードを実行すると(1行追加します):

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

プログラムがクラッシュし、コマンド ラインに「バス エラー」と表示されます。それが何を意味するのかさえわかりません。Image は機能するので、PIL は正しくインストールされていると思いますが、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
4

3 に答える 3

7

バス エラーについてはわかりませんが、PhotoImage を呼び出す前に Tk ウィンドウを作成する必要があります。このスクリプトは私のために機能します-

import Image 
import ImageTk
from Tkinter import Tk

window = Tk()
i = Image.open("image.png") 
photo = ImageTk.PhotoImage(i)
于 2010-07-06T05:57:07.200 に答える
6

ImageTk.PhotoImage にはガベージ コレクション (参照カウント) のバグがあります。PhotoImage オブジェクトへの参照を、クラス インスタンス変数のグローバル変数に配置する必要があります (例: self.myphoto = ImageTk.PhotoImage(i))。

次の警告を参照してください。

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

于 2012-01-31T12:35:35.087 に答える
2

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()
于 2014-05-06T13:44:05.063 に答える