这个错误通常是因为 ImageTk.PhotoImage 对象被垃圾回收了,可以将其存储在实例属性或全局变量中以避免回收。在代码中,需要将 background_img 存储在一个实例属性中,例如:

self.background_img = ImageTk.PhotoImage(img)

然后在 create_image 方法中使用 self.background_img。如果是在全局作用域中使用,可以将 background_img 存储在一个全局变量中。

以下是一个修正后的代码示例:

import tkinter as tk
from PIL import Image, ImageTk

# 创建窗口
window = tk.Tk()
window.title('背景图演示')

# 加载背景图
img = Image.open('数据科学.jpg')
img = img.resize((600, 400), Image.ANTIALIAS)

# 将背景图存储在实例属性中
self.background_img = ImageTk.PhotoImage(img)

# 创建Canvas组件并插入背景图
canvas = tk.Canvas(window, width=600, height=400)
canvas.pack(fill='both', expand=True)
canvas.create_image(0, 0, image=self.background_img, anchor='nw')

# 运行窗口
window.mainloop()

通过将 background_img 存储在实例属性中,可以防止它被垃圾回收,从而避免错误的发生。

解决 Python Tkinter 中的 TclError: image

原文地址: https://www.cveoy.top/t/topic/oshm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录