2017-07-16 9 views
2
from tkinter import * 

root = Tk() 

photo = PhotoImage(file='blueface.png') 
label = Label(root, image=photo) 
label.pack() 

root.mainloop() 

画像face.pngは、このの.pyスクリプトと同じディレクトリにあるが、私はそれを実行したときに、私は次のエラーを取得する:Tkinterをのバージョンがあること.PNG年代を扱うことができないtkinter PhotoImageは存在しませんか?

line 5, in <module> 
    photo = PhotoImage(file='blueface.png') 
line 3539, in __init__ 
    Image.__init__(self, 'photo', name, cnf, master, **kw) 
line 3495, in __init__ 
    self.tk.call(('image', 'create', imgtype, name,) + options) 
_tkinter.TclError: couldn't open "face.png": no such file or directory 
+1

あなたのサンプルコードはblueface.png' 'のファイル名がありますが、あなたのテキスト記述は' face.pngに言及します'。どちらですか? –

答えて

2

あなたがパスのpythonせずにそのようなファイルを呼び出すスクリプトは、それが同じフォルダ内にありますと仮定して画像を同じフォルダにあることをあまり重要ではありません。あなたがスクリプトを開始したときに作業していたものです。たとえば、スクリプトと画像の両方がtempフォルダ内にある、あなたは、このようなスクリプトが開始された場合:

python temp/script.py 

インタプリタがblueface.pngtempでもあることを認識しないとフォルダに探していますこの場合、親の場合temp

絶対パスを使用するか、__file__を使用して最初に完全なスクリプトアドレスを取得します。

photo = PhotoImage(file='/absolute/path/to/image/blueface.png') 

またはイメージのパスを構築するために、現在のスクリプトの場所を使用して:たとえば

import os 
base_folder = os.path.dirname(__file__) 
image_path = os.path.join(base_folder, 'blueface.png') 
photo = PhotoImage(file=image_path) 
+1

これがインポートされたモジュールの場合、 'sys.argv [0]'は助けになりません。 '__file__'を使う方がはるかに優れています。 – Novel

+0

問題のスクリプトがインポートされたモジュールではないことは合理的ですが、私はあなたの意見を参照しています...しかし、私は '__file__'でそれほど経験がありません。 –

2

古いですよくファイルを.gifにしてみてください。またはPILから光画像を使用します。

import tkinter as tk 
from PIL import Image, ImageTk 

root = tk.Tk() 

photo = ImageTk.PhotoImage(Image.open('blueface.png')) 
label = tk.Label(root, image=photo) 
label.pack() 

root.mainloop() 
関連する問題