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

6 python tkinter image-processing

我正在制作一个 tkiner 应用程序,它向用户显示一个包含一些基本信息和图片的页面,然后允许他们单击按钮查看实时比特币价格数据。但是,当我将图像添加到“启动”页面时,我从 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
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

tk.Tk.iconbitmap(self, default='main.ico')
Run Code Online (Sandbox Code Playgroud)

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

小智 5

像@joost-broekhuizen一样,我在使用 Tkinter 和 matplotlib.pyplot 函数时遇到了同样的问题。向 PhotoImage 函数添加“master”解决了我的问题。

损坏的代码(引发:TclError:图像“pyimage10”不存在):

import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import Tkinter as tk
from PIL import Image, ImageTk

fig = plt.figure()

root = tk.Tk()
image = Image.open("background.png")
photo = ImageTk.PhotoImage(image)
label = tk.Label(root, image=photo)
label.image = image
label.pack()

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

将 'master=root' 添加到 PhotoImage 解决了这个错误!

photo = ImageTk.PhotoImage(image, master=root)
Run Code Online (Sandbox Code Playgroud)


Bil*_*adj 2

您无法使用 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)
Run Code Online (Sandbox Code Playgroud)

编辑:

请创建一个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()
Run Code Online (Sandbox Code Playgroud)

如果您收到错误,请告诉我。

  • 即使我按照您的建议使用了 PIL 的 Image 和 ImageTk 模块,我仍然遇到相同的错误。 (2认同)