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

使用Pillow图片仍遇AttributeError:'PhotoImage'无'_PhotoImage__photo'属性

解决ImageTk.PhotoImage的AttributeError问题

报错代码

image= Image.open(path+'test/test_'+lookingAt+'.png')
im= ImageTk.PhotoImage(image=image)

错误信息

name = self.__photo.name
AttributeError: 'PhotoImage' object has no attribute '_PhotoImage__photo'

核心原因与解决办法

1. 保留PhotoImage对象的持久引用

这是触发该错误最常见的原因:Python的垃圾回收机制会回收没有被持续引用的PhotoImage对象,导致其内部属性丢失。解决方式是把im绑定到全局变量,或者绑定到一个持续存在的Tkinter组件属性上:

# 示例:绑定到Tk根窗口对象
root = tk.Tk()
image = Image.open(path+'test/test_'+lookingAt+'.png')
im = ImageTk.PhotoImage(image=image)
root.im = im  # 保留引用,避免被回收

# 如果用Label显示图片,也可以绑定到Label属性
label = tk.Label(root, image=im)
label.im = im
label.pack()

2. 确认正确导入PIL模块

确保你导入的是PIL的ImageTk.PhotoImage,而非tkinter自带的PhotoImage(后者不兼容PIL的Image对象):

from PIL import Image, ImageTk
import tkinter as tk

3. 验证图片路径有效性

虽然报错本身不是路径问题,但如果图片文件不存在或路径错误,可能导致Image对象异常,进而引发后续问题。可以提前校验路径:

import os
image_path = path + 'test/test_' + lookingAt + '.png'
if os.path.exists(image_path):
    image = Image.open(image_path)
    im = ImageTk.PhotoImage(image=image)
else:
    print(f"错误:图片文件不存在 - {image_path}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:09:45