tkinter PhotoImage不存在?

时间:2017-07-16 04:07:57

标签: python tkinter

from tkinter import *

root = Tk()

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

root.mainloop()

image face.png与此.py脚本位于同一目录中,但是当我运行它时,我收到以下错误:

 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

2 个答案:

答案 0 :(得分:2)

旧版本的tkinter无法很好地处理.png。尝试将文件设为.gif。或者使用PIL中的PhotoImage:

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()

答案 1 :(得分:2)

图像与脚本位于同一文件夹中并不重要,当您调用文件时没有路径python假定它与您正在处理的文件夹相同当你启动脚本时。例如,如果脚本和图像都在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)