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

在CustomTkinter中跨模块调用含图片组件时出现pyimage1不存在错误

解决_tkinter.TclError: image "pyimage1" doesn't exist错误

错误原因

  1. 循环导入导致上下文不匹配:主脚本main.py导入image_script,而image_script的call_image函数又反向导入main.py的window实例,造成模块加载的循环依赖,使得CTkImage绑定的Tcl上下文与主窗口的上下文不一致,触发图片不存在的错误。
  2. CTkImage被垃圾回收:函数内部创建的CTkImage如果没有持久化引用,Python的垃圾回收机制会销毁它,导致Tcl层面找不到对应的图片对象。
  3. 额外问题:rely=2的位置设置会让控件完全超出窗口范围,即使修复错误也无法看到图片。

解决方案

修改代码消除循环导入,同时保留图片对象的引用:

主脚本main.py

from customtkinter import CTk
import image_script

window = CTk()
window.geometry("1400x1000")

# 将主窗口作为参数传递给函数,避免循环导入
image_script.call_image(window)

window.mainloop()

模块image_script.py

from customtkinter import CTkLabel, CTkImage
from PIL import Image

def call_image(parent_window):
    # 创建图片对象
    image_example = CTkImage(Image.open("images/icon_example.png"), size=(150, 100))
    # 创建标签,text=""避免默认文本遮挡图片
    image_label = CTkLabel(parent_window, image=image_example, text="")
    # 保留图片引用,防止被垃圾回收
    image_label.image = image_example
    # 调整位置到窗口可见区域
    image_label.place(relx=0.5, rely=0.5, anchor="center")

关键说明

  • 消除循环导入:通过参数传递主窗口实例,避免模块间的互相导入,确保图片对象与主窗口属于同一个Tcl上下文。
  • 保留图片引用:将CTkImage赋值给标签的额外属性,阻止垃圾回收机制销毁图片资源。
  • 修正控件位置:rely=0.5让标签居中显示,确保能看到图片。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:32:45