Невозможно открыть изображения с помощью Python Image.open ()
Когда я вызываю эту функцию, я получаю сообщение об ошибке:
⇝ AttributeError: type object 'Image' has no attribute 'open'
import Image im = Image.open('test.jpg')
У меня нет никакой проблемы. Любые идеи? Спасибо!
Можете ли вы опубликовать весь файл, который дает вам эту ошибку? — Mike Graham
3 ответы
Странно, что вы получаете исключение о том, что Image является объектом типа, а не модулем. Назначается ли «Изображение» в другом месте вашего кода?
Это был глупый вопрос, извините. Имя моего класса было Image, поэтому возник конфликт. Спасибо за помощь! — поймать в ловушку
Есть ли в вашем фактическом коде неправильные утверждения:
Модуль Image содержит класс Image, но они, конечно, разные (у модуля есть метод open). Если вы используете любую из этих двух форм, Image будет неправильно ссылаться на класс.
РЕДАКТИРОВАТЬ: Другая возможность заключается в том, что вы сами определяете конфликтующее имя изображения. У вас есть собственный класс изображений? Если это так, переименуйте его.
Эти строки были возможными причинами ошибки, а не рекомендациями. Если вы раньше не использовали такой код, возможно, Крис прав. Изображение получает неправильное значение где-то еще (может быть, у вас есть собственный класс изображения?) — Мэтью Флашен
Это согласуется с тем, что вы создали класс (в новом стиле) с именем Image или импортировали его откуда-то еще (возможно, непреднамеренно из импорта «*») в какой-то момент после импорта «Image»:
>>> import Image >>> Image.open >>> class Image(object): pass . >>> Image.open Traceback (most recent call last): File "", line 1, in AttributeError: type object 'Image' has no attribute 'open' >>>
Ищите это. Вы можете проверить с помощью «print Image», что должно дать вам что-то вроде:
AttributeError: Image has no attribute ‘open’
I’m new to learning the Tkinter Module that is built in Python. I was trying to build a simple Image Viewer GUI using pillow. I’m getting an Attribute Error here.
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()
I can’t seem to find a fix for this and none of the solutions for similar questions on StackOverflow, work.
Answers
this imports everything from tkinter, including Image:
Init signature: Image(imgtype, name=None, cnf=<>, master=None, **kw) Docstring: Base class for images. File: [. ] Type: type Subclasses: PhotoImage, BitmapImage
So, the Image module that you import earlier from PIL is overwritten.
from tkinter import * from PIL import Image, ImageTk
b) import only that what you need from tkinter
from PIL import ImageTk, Image from tkinter import Tk
c) import Image as something else:
from PIL import ImageTk from PIL import Image as PILImage from tkinter import *
The type of error you describe can be caused simply by mismatched indentation. If the method is at the very bottom of your class, move it up in the class a bit and the problem will become apparent.
When python interpreters run into mismatched indents (like say you started using tabs at the bottom of a file that was indented with spaces), the interpreter will not always throw an error; it can simply ignore the rest of the file. I ran into this just today while updating some old code where the original author used different whitespace chars (that happened to match my Geany tabs), and it threw me for a loop for a lot longer than I’d like to admit. 🙂
Помогите с изображением! AttributeError: type object ‘Image’ has no attribute ‘open’
def _about():
win = Toplevel(root)
win.iconbitmap(‘First_String.ico’)
win.geometry(‘300×200’)
lab = Label(win, text=»First string version 1.4\n»
«Developer:NewModernSoft\n»
«2019.02.16\n»
«Copyrighted by NewModernSoft©»)
lab.pack()
img = Image.open(«mnm.png»)
img.show()
def _exit():
global sa
if askyesno(«Exit», «Saved changes?»):
if sa is None:
sa = asksaveasfilename(defaultextension=».txt», filetypes=((«text file», «*.txt»), («All Files», «*.*»)))
_save()
root.destroy()
def _newwindow():
root = Tk()
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
m = Menu(root)
root.config(menu=m)
fm = Menu(m)
m.add_cascade(label=»File», menu=fm)
fm.add_command(label=»New», command=_newwindow)
fm.add_command(label=»Open», command=_open)
fm.add_command(label=»Save», command=_save)
hm = Menu(m)
m.add_cascade(label=»Help», menu=hm)
hm.add_command(label=»About Program», command=_about)
hm.add_command(label=»Exit», command=_exit)
txt = Text(root, width=110, height=500, font=’14’, yscrollcommand=scrollbar.set)
txt.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=txt.yview)
scrollbar.bind(»)
root = Tk()
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=Y)
fm = Menu(m)
m.add_cascade(label=»File», menu=fm)
fm.add_command(label=»New», command=_newwindow)
fm.add_command(label=»Open», command=_open)
fm.add_command(label=»Save», command=_save)
hm = Menu(m)
m.add_cascade(label=»Help», menu=hm)
hm.add_command(label=»About Program», command=_about)
hm.add_command(label=»Exit», command=_exit)
txt = Text(root, width=110, height=500, font=’14’, yscrollcommand=scrollbar.set)
txt.pack(side=LEFT, fill=BOTH)
scrollbar.config(command=txt.yview)
scrollbar.bind(»)