python的ImageTk.PhotoImage大坑及解决

 更新时间:2022年11月30日 16:37:02   作者:_less is more  
这篇文章主要介绍了python的ImageTk.PhotoImage大坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

python的ImageTk.PhotoImage大坑

如果大家遇到这样的报错:

Exception in Tkinter callback
Traceback (most recent call last):
  File "E:\Anaconda3_files\lib\site-packages\PIL\Image.py", line 2515, in fromarray
    mode, rawmode = _fromarray_typemap[typekey]
KeyError: ((1, 1, 3), '<f8')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "E:\Anaconda3_files\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
  File "D:\Junior Spring\Digital Image Processing and Experiment\数字实验备份\结课实验\ImgProcessing.py", line 806, in Sobel_Sharpening
    image = ImageTk.PhotoImage(Image.fromarray(img))
  File "E:\Anaconda3_files\lib\site-packages\PIL\Image.py", line 2517, in fromarray
    raise TypeError("Cannot handle this data type")
TypeError: Cannot handle this data type

网上很多教程的方法我也试过,没有用,也调试不出为什么

这里有个很关键的信息:Cannot handle this data type

说明是数据的类型错了,但再三检查后,明明就是带入的<class ‘numpy.ndarray’>类型

所以,大坑来了

请仔细检查自己array里面每个数的类型,它必须是<class ‘numpy.uint8’>,否则就会报错

可以这样改:

dst = dst.astype(np.uint8)
image = ImageTk.PhotoImage(Image.fromarray(dst))

Tkinter PhotoImage 踩坑记录

1.直接使用PhotoImage(file= ‘xxxx’)报错:_tkinter.TclError: couldn’t recognize data in image file “xxxxx.png”

原因:PhotoImage支持的图片格式有限。

解决办法:使用PILLOW库的ImageTk

  • 1.如果没有安装PILLOW插件,请安装插件,使用 “pip install PILLOW”命令安装即可
  • 2.生成PhotoImage对象:

代码:

from PIL import Image

from PIL import ImageTk

img = Image.open(filePath)

img = ImageTk.PhotoImage(img)

2.PhotoImage显示问题:显示空白框,大小是图片的真实大小

原因:见https://docs.Python.org/2/library/tkinter.html#images,说白了就是图像数据引用被回收了图片就显示不出来了,只会显示一个空box。

解决办法:保存PhotoImage对象即可,示例代码如下:

代码:

imgDict = {}
def getImgWidget(filePath):

    if os.path.exists(filePath) and os.path.isfile(filePath):

        if filePath in imgDict and imgDict[filePath]:

            return imgDict[filePath]

        img = Image.open(filePath)

        #print(img.size)

        img = ImageTk.PhotoImage(img)

        imgDict[filePath] = img

        return img

    return None

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python数据类型之间怎么转换技巧分享

    python数据类型之间怎么转换技巧分享

    在本篇文章里小编给大家分享的是关于python数据类型之间怎么转换实例以及小技巧内容,有兴趣的朋友们参考下。
    2019-08-08
  • 使用Python对Access读写操作

    使用Python对Access读写操作

    学习Python的过程中,我们会遇到Access的读写问题,这时我们可以利用win32.client模块的COM组件访问功能,通过ADODB操作Access的文件。下面跟着小编一起来看下吧
    2017-03-03
  • Python 的Json 模块编码详解

    Python 的Json 模块编码详解

    这篇文章主要为大家介绍了Python 的Json 模块编码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2021-11-11
  • Python中尝试多线程编程的一个简明例子

    Python中尝试多线程编程的一个简明例子

    这篇文章主要介绍了Python中尝试多线程编程的一个简明例子,由于GIL的存在,Python中的多线程编程一个是热点和难点问题,需要的朋友可以参考下
    2015-04-04
  • python中关于tqdm的用法

    python中关于tqdm的用法

    这篇文章主要介绍了python中关于tqdm的用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 关于最大池化层和平均池化层图解

    关于最大池化层和平均池化层图解

    这篇文章主要介绍了关于最大池化层和平均池化层图解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python里的单引号和双引号的有什么作用

    python里的单引号和双引号的有什么作用

    在本篇文章里小编给大家分享的是一篇关于python里的单引号和双引号的作用的相关内容,需要的朋友们可以学习下。
    2020-06-06
  • 程序员写Python时的5个坏习惯,你有几条?

    程序员写Python时的5个坏习惯,你有几条?

    这篇文章主要介绍了程序员写Python时的5个坏习惯,你有几条?有的习惯会让 Bug 变得隐蔽难以追踪,当然,也有的并没有错误,只是个人觉得不够优雅。本文有示例代码,感兴趣的朋友跟随小编一起看看吧
    2018-11-11
  • Python制作进度条的四种方法总结

    Python制作进度条的四种方法总结

    如果你之前没用过进度条,八成是觉得它会增加不必要的复杂性或者很难维护,其实不然。要加一个进度条其实只需要几行代码,快跟随小编一起学习学习吧
    2022-11-11
  • Jupyter Notebook如何导入python文件时的问题

    Jupyter Notebook如何导入python文件时的问题

    这篇文章主要介绍了Jupyter Notebook如何导入python文件时的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论