You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter报错‘pyimage1 doesn't exist’,如何设置背景图片?

解决tkinter背景图片报错“_tkinter.TclError: image 'pyimage1' doesn't exist”

问题根源

  1. 多个Tk实例冲突:你的代码同时创建了App(tk.Tk)和self.root1 = Tk()两个主窗口实例,tkinter不允许存在多个Tcl上下文,这会导致图片资源无法正确绑定到窗口。
  2. PhotoImage被垃圾回收:bg = ImageTk.PhotoImage(img)创建的对象没有持久引用,当__init__方法执行完毕后,Python垃圾回收机制会回收该对象,导致界面找不到图片资源。

修正后的代码

import tkinter as tk
from PIL import Image, ImageTk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry('800x690')  
        self.title('tkinter')
        
        # 加载并调整图片尺寸(可选,适配窗口大小)
        img = Image.open('4.jpg')
        img = img.resize((800, 690), Image.Resampling.LANCZOS)
        
        # 创建PhotoImage对象并保留实例引用
        self.bg_image = ImageTk.PhotoImage(img)
        
        # 创建背景标签并铺满整个窗口
        bg_label = tk.Label(self, image=self.bg_image)
        bg_label.place(x=0, y=0, relwidth=1, relheight=1)
        
        # 额外保留引用,防止垃圾回收
        bg_label.image = self.bg_image

if __name__ == "__main__":
    app = App()
    app.mainloop()

关键修改说明

  • 移除了多余的self.withdraw()和self.root1 = Tk(),直接使用继承的App类作为主窗口,确保只有一个Tk实例。
  • 将PhotoImage对象绑定到实例属性self.bg_image,同时绑定到标签的image属性,避免被垃圾回收。
  • 使用relwidth=1和relheight=1让背景标签自动适配窗口大小,无需手动固定坐标。
  • 统一导入tkinter为tk,优化代码可读性。

内容的提问来源于stack exchange,提问作者pegah zahedi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 23:02:13