如何修复“ image” pyimage10“不存在”错误,为什么会发生?


问题内容

我正在制作一个更简单的应用程序,它在向用户显示一个包含一些基本信息和图片的页面之前,允许他们单击按钮以查看实时比特币价格数据。但是,当我将图像添加到“启动”页面时,我从IDE中收到以下错误消息:

 BTC_img_label = tk.Label(self, image=BTC_img)
 File "C:\Python34\lib\tkinter\__init__.py", line 2609, in __init__
 Widget.__init__(self, master, 'label', cnf, kw)
 File "C:\Python34\lib\tkinter\__init__.py", line 2127, in __init__
 (widgetName, self._w) + extra + self._options(cnf))
 _tkinter.TclError: image "pyimage10" doesn't exist

我相信这些是引起我的错误的代码行(它们是将图像添加到“启动”页面的相同行):

BTC_img = tk.PhotoImage(file='bitcoin.png')
BTC_img_label = tk.Label(self, image=BTC_img)
BTC_img_label.image = BTC_img
BTC_img_label.grid(row=2, column=0)

我还注意到,运行该程序时,我设置的图标未显示在GUI窗口中,仅显示默认的Tkinter羽毛图标。如果有人感兴趣,这是我的图标设置代码(尽管我很确定这不会引起我的错误):

tk.Tk.iconbitmap(self, default='main.ico')

是的,对于任何想知道的人,我确实将tkinter导入为tk,所以这不是我的错误。如果有人能告诉我为什么会发生此错误,我将非常感兴趣:我还没有看到很多其他的例子,而且我所看到的都没有提及我的图标问题。希望有人能弄清楚!


问题答案:

您无法使用tkinter加载 .png
格式。您需要为此使用PIL库:

import PIL

image = PIL.Image.open("bitcoin.png")
BTC_img = PIL.ImageTk.PhotoImage(image)
BTC_img_label = tk.Label(self, image=BTC_img)
BTC_img_label.image = BTC_img
BTC_img_label.grid(row=2, column=0)

编辑:

请创建一个test.py文件并运行以下确切代码:

import tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()    
image = Image.open("bitcoin.png")
photo = ImageTk.PhotoImage(image)
label = tk.Label(root, image=photo)
label.image = photo
label.grid(row=2, column=0)
#Start the program
root.mainloop()

告诉我您是否遇到错误。