TclError: image "pyimage22" doesn't exist
时间: 2023-07-22 11:23:22 浏览: 214
【解决问题】Python-Error:image “pyimage1” doesn’t exist
这个错误通常是因为 `PhotoImage` 对象被垃圾回收导致的。你可以将 `PhotoImage` 对象存储到一个实例变量中或全局变量中,从而避免被垃圾回收。
下面是修改后的代码:
```
import tkinter as tk
import webbrowser
class ImageWindow:
def __init__(self, master):
self.master = master
self.master.geometry("600x400")
# 定义六张图像和对应的本地html文件路径
self.image_paths = [
("image1.jpg", "file:///C:/path/to/html1.html"),
("image2.jpg", "file:///C:/path/to/html2.html"),
("image3.jpg", "file:///C:/path/to/html3.html"),
("image4.jpg", "file:///C:/path/to/html4.html"),
("image5.jpg", "file:///C:/path/to/html5.html"),
("image6.jpg", "file:///C:/path/to/html6.html")
]
# 存储 PhotoImage 对象的列表
self.images = []
for i, (image_path, _) in enumerate(self.image_paths):
image = tk.PhotoImage(file=image_path)
self.images.append(image)
label = tk.Label(self.master, image=image)
label.grid(row=i//2, column=i%2)
label.bind("<Button-1>", lambda event, index=i: self.open_html(index))
# 定义一个函数,用于打开本地html文件
def open_html(self, index):
_, html_path = self.image_paths[index]
webbrowser.open_new(html_path)
if __name__ == '__main__':
root = tk.Tk()
app = ImageWindow(root)
root.mainloop()
```
在这个修改后的代码中,我们将 `PhotoImage` 对象存储到了 `self.images` 列表中,这样就可以避免 `PhotoImage` 对象被垃圾回收。另外,我们还将 `open_html` 函数移到了类中,并将 `index` 作为参数传递给它。这样,我们就可以通过 `index` 参数获取到对应的本地html文件路径了。
阅读全文