【问题标题】:AttributeError: Image has no attribute 'open'AttributeError:图像没有属性“打开”
【发布时间】:2020-09-01 18:58:13
【问题描述】:

我刚开始学习使用 Python 构建的 Tkinter 模块。我正在尝试使用枕头构建一个简单的图像查看器 GUI。我在这里遇到属性错误。

AttributeError: type object 'Image' has no attribute 'open'

这是我的代码:

from PIL import ImageTk,Image
from tkinter import *
base = Tk()
base.title("Image Viewer")
base.iconbitmap("download.ico")
img1 = ImageTk.PhotoImage(Image.open("download.png"))
label1 = Label(image = img1)
label1.grid(row = 0, column = 0, columnspan = 3)
base.mainloop()

我似乎无法找到解决此问题的方法,而且 StackOverflow 上类似问题的解决方案都没有。

【问题讨论】:

标签: python tkinter python-imaging-library attributeerror


【解决方案1】:

你可以尝试使用这个sn-p做一件事

import PIL.Image
import PIL.ImageTk
im = PIL.Image.open("download.png")
photo = PIL.ImageTk.PhotoImage(im)

【讨论】:

    【解决方案2】:
    from tkinter import * 
    

    这会从 tkinter 导入所有内容,包括 图片:

    Init signature: Image(imgtype, name=None, cnf={}, master=None, **kw)
    Docstring:      Base class for images.
    File:           [...]
    Type:           type
    Subclasses:     PhotoImage, BitmapImage
    

    因此,您之前从 PIL 导入的 Image 模块将被覆盖。

    你可以

    a) 颠倒顺序:

    from tkinter import *
    from PIL import Image, ImageTk
    

    b) 只从 tkinter 导入你需要的东西

    from PIL import ImageTk, Image
    from tkinter import Tk
    

    c) 将图像导入为其他内容:

    from PIL import ImageTk
    from PIL import Image as PILImage
    from tkinter import * 
    

    【讨论】:

    • 你能告诉我 tkinter 包的 Image 模块与 PILpackage 中的模块有何不同(从你的回答看来它们是' 这会导入所有内容来自 tkinter,包括 Image ')?
    • tkinter 的 Image 只是一个类,正如我在引用的文本中显示的那样。 PIL的Image是一个功能齐全的完整模块。所以,它们是完全不同的东西,碰巧有相同的名字。
    猜你喜欢
    • 2019-05-16
    • 2020-02-12
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多