首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AttributeError: PhotoImage对象没有属性“_PhotoImage__photo”

AttributeError: PhotoImage对象没有属性“_PhotoImage__photo”
EN

Stack Overflow用户
提问于 2018-06-03 02:24:40
回答 3查看 27K关注 0票数 5

我正在研究Yolo3-4-PY,用tkinter实现它。

我到处都查过了,但无法解决这个问题。

当我运行程序时,画布就会显示出来,但是当我点击“开始视频”(btton)时,我会得到以下错误:

从权重/yolov3中加载权重.权重.完成!/usr/local/lib/python3.5/dist-packages/PIL/ImageTk.py:119: FutureWarning:元素级比较失败;返回标量,但将来如果模式不是"1“、"L”、"RGB“、"RGBA”,则将执行元素级比较

代码语言:javascript
复制
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.5/tkinter/__init__.py", line 1553, in __call__
return self.func(*args)
File "webcam_demo.py", line 13, in start_video
show_frame()
File "webcam_demo.py", line 39, in show_frame
imgtk = ImageTk.PhotoImage(image=cv2image)
File "/usr/local/lib/python3.5/dist-packages/PIL/ImageTk.py", line 120, in 
__init__
mode = Image.getmodebase(mode)
File "/usr/local/lib/python3.5/dist-packages/PIL/Image.py", line 313, in 
getmodebase
return ImageMode.getmode(mode).basemode
File "/usr/local/lib/python3.5/dist-packages/PIL/ImageMode.py", line 55, in 
getmode
return _modes[mode]
TypeError: unhashable type: 'numpy.ndarray'
Exception ignored in: <bound method PhotoImage.__del__ of 
<PIL.ImageTk.PhotoImage object at 0x7f4b73f455c0>>
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/PIL/ImageTk.py", line 130, in 
__del__    name = self.__photo.name
AttributeError: 'PhotoImage' object has no attribute '_PhotoImage__photo'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-04 05:20:46

问题

imgtk = ImageTk.PhotoImage(image=cv2image)行中,您将一个numpy数组(cv2image)作为输入传递给ImageTk.PhotoImage。但是PIL.ImageTk的源代码提到它需要一个PIL映像。

这就是PIL.ImageTkinit()所提到的PhotoImage源代码。

代码语言:javascript
复制
class PhotoImage(object):
    .....
    :param image: Either a PIL image, or a mode string.  If a mode string is
              used, a size must also be given.

解决方案

因此,基本上,您必须将numpy数组转换为PIL,然后将其传递给ImageTk.PhotoImage()。

所以,您能用imgtk = ImageTk.PhotoImage(image=cv2image) imgtk = ImageTk.PhotoImage(image=PIL.Image.fromarray(cv2image))**?**替换吗?

这将将numpy数组转换为PIL映像,并将其传递到方法中。

参考文献

我从本源提取了将numpy数组转换为PIL的代码。

票数 8
EN

Stack Overflow用户

发布于 2020-08-29 09:07:45

在我的例子中,只需简单地添加以下一行就可以更正

代码语言:javascript
复制
root = tkinter.Tk()

完整代码:

代码语言:javascript
复制
root = tkinter.Tk()
image = PIL.Image.open(r"C:\Users\Hamid\Desktop\asdasd\2.jpeg")
img = ImageTk.PhotoImage(image)
l = Label(image=img)
l.pack()
票数 7
EN

Stack Overflow用户

发布于 2020-12-03 11:18:51

当您将图像变量放置在标签中时,必须将图像变量初始化为" image“。

(正确的方法)

代码语言:javascript
复制
photo = PhotoImage(file = "C://Users//Carl//Downloads//download.png")
label1 = Label(image = photo)
label1.pack()

(错误的方法)

代码语言:javascript
复制
photo = PhotoImage(file = "C://Users//Carl//Downloads//download.png")
label1 = Label(photo)
label1.pack()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50662773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档