Tkinter的Pyimage不存在。

9

我知道有很多类似的问题,但是没有一个简单到我能够理解。我有以下代码:

import Tkinter as tk
from PIL import Image, ImageTk

class MainWindow:
    def __init__(self, master):
        canvas = Canvas(master)
        canvas.pack()
        self.pimage = Image.open(filename)
        self.cimage = ImageTk.PhotoImage(self.pimage)
        self.image = canvas.create_image(0,0,image=self.cimage)


filename = full_filename
root = tk.Tk()
x = MainWindow(root)
mainloop()

我遇到了以下错误:

TclError: image "pyimage36" doesn't exist

我看过一些关于图像对象被清理的文章,但是我并不太理解。


展示完整的错误信息 - 这里还有更多的信息。"pyimage36"是一个文件名吗? - furas
2
我也遇到了这个问题。似乎只有在使用Spyder时才会出现这个问题。在Windows和Linux(Raspbian)上使用Spyder时都会出现错误。当我在Pi上使用Idle或在Windows上使用Pycharm时,就不会出现这种情况。 - BRM
5个回答

18

搞定了。由于某种原因,在调试器中运行时,如果之前的执行抛出了错误,我会遇到“pyimage不存在”的错误。然而,如果我重新启动调试器(或者之前没有运行脚本抛出错误),那么程序就可以正常运行。


有些人可能会持不同意见。例如,在网络中,通常的做法是在一定时间后或遇到错误时重新启动服务器(而不是尝试修复错误)。这是因为从已知状态开始更加可预测。 - user3727843
谢谢!使用appJar时就是这个问题。 - shahar_m

4

当我使用Spyder 3.3.6时,遇到了相同的错误信息。在出现“Tinker pyimage error”后,唯一让.png文件能够加载和显示的方法是进入控制台并重新启动内核。之后就可以正常工作了。

最初的回答:


2
from tkinter import *
from PIL import Image, ImageTk

root = Tk()
root.title("Title")

img = Image.open('Paste the directory path')
bg = ImageTk.PhotoImage(img)

lbl = Label(root, image=bg)
lbl.place(x=0, y=0)

mainloop() 

我遇到了同样的错误。尝试使用以下代码,这将帮助你。 此外,如果你创建了一个按钮并用它来打开另一个窗口,那么请使用window = Toplevel(),否则它会再次显示相同的错误。


在Spyder 5.1.5上,每次代码出错(测试时)都需要重新启动控制台。 - rearThing

2
(Python 3.8)
如果您正在使用带有控制台(例如Spyder)的IDE,请在控制台中调用root.mainloop()

很可能您有一堆部分加载的tkinter GUI,由于错误阻止了运行root.mainloop()函数,它们从未得到执行。
一旦您运行了root.mainloop(),许多GUI可能会出现在屏幕上。在关闭所有这些GUI后,请再次运行您的代码。
多个Tkinter GUI出现在屏幕上的图像

在此处阅读有关mainloop()的更多信息:https://pythonguides.com/python-tkinter-mainloop/


0
来自程序员求:
图像“pyimage1”不存在 因为程序中只能有一个根窗口,也就是只能存在一个Tk(),其他窗口只能以顶级窗口(Toplevel())的形式存在。
原始代码
import tkinter as tk
window = tk.TK()

修订后的代码

import tkinter as tk
window = tk.Toplevel()

保持其他代码不变

https://www.programmersought.com/article/87961175215/


这解决了我的学生代码的问题。必须使用“TopLevel”对象来创建次级窗口。 - Jake Poznanski

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