tkinter的PhotoImage不存在?

5
from tkinter import *

root = Tk()

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

root.mainloop()

图片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

1
你的示例代码文件名为 blueface.png,但是你的文本描述提到了 face.png。那个是正确的? - John Gordon
2个回答

4

当您以没有路径的方式调用文件时,图像与脚本在同一个文件夹中并不重要。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)

1
如果这是一个导入的模块,sys.argv[0] 将无法帮助。使用 __file__ 更好、更整洁。 - Novel

0

较旧版本的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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接