使用tkinter时Pillow报AttributeError:'Image'无'open'属性怎么办?
解决AttributeError: type object 'Image' has no attribute 'open'问题
问题原因
你代码里同时使用了from PIL import Image和from tkinter import *,tkinter模块内置了一个同名的Image类,后者会覆盖PIL的Image类,导致你调用的Image.open()实际是tkinter的Image,而这个类并没有open方法,因此触发报错。
解决办法
方法一:避免导入tkinter全部内容
将from tkinter import *替换为import tkinter as tk,后续tkinter相关组件都用tk.前缀调用,这样就不会和PIL的Image冲突:
import tkinter as tk import sys from PIL import Image from datetime import datetime import time # 示例:tkinter组件调用方式 root = tk.Tk() label = tk.Label(root, text="示例")
方法二:重命名PIL的Image导入
如果不想修改tkinter的导入方式,将PIL的Image重命名后使用:
from PIL import Image as PILImage # 调用时改用重命名后的类 img = PILImage.open(img_filename)
方法三:重新导入PIL的Image(不推荐)
在from tkinter import *之后,再次导入PIL的Image,覆盖tkinter的同名类:
from tkinter import * from PIL import Image # 重新导入,覆盖tkinter的Image
额外建议
PIL已停止维护,现在主流使用的是Pillow(PIL的分支),建议卸载多余的PIL包,只保留Pillow避免冲突:
pip uninstall PIL pip install --upgrade pillow
内容的提问来源于stack exchange,提问作者unreal 8 usher
相关产品推荐
相关产品推荐

