2017-07-16 121 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的的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

不要緊非常多,圖像在同一文件夾中的腳本,當你調用這樣的文件不帶路徑蟒蛇假定它是在同一文件夾您在開始腳本時正在進行的工作。例如,如果兩個腳本和圖像都在temp文件夾,你開始你的腳本是這樣的:

python temp/script.py 

的解釋並沒有意識到blueface.png也是temp,文件夾中查找它是在這種情況下,您的父親是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()