Ошибка ‘Image’ не имеет атрибута ‘open’, но она должна

#python #tkinter #python-imaging-library

#python #tkinter #python-imaging-library

Вопрос:

Я использую PIL и TKinter для открытия изображения. Я не понимаю, почему я получаю эту ошибку

 import os
import random
from PIL import Image
import time
from tkinter import *

root = Tk()

def timer(mins):
    time.sleep(mins * 60)

def anmuViewer():
    random_pic = (random.choice(os.listdir("D:/de_clutter/memez/anmu")))
    openPic = Image.open('D:/de_clutter/memez/anmu/'   random_pic)
    openPic.show()

    timer(3)

start_btn = Button(root, text = "Start", command = anmuViewer)
start_btn.pack()

root.mainloop()
  

что должно произойти, так это то, что должно появиться окно tkinter только с кнопкой «пуск». Когда я нажимаю эту кнопку, должно появиться новое окно с изображением. вместо этого я получаю эту ошибку

 line 17, in anmuViewer
    openPic = Image.open('D:/de_clutter/memez/anmu/'   random_pic)
AttributeError: type object 'Image' has no attribute 'open'
  

Комментарии:

1. «tkinter. Изображение «перезаписывает» файл. Изображение» в пространстве имен вашего модуля. Избегайте импорта с * помощью .

2. Вот почему импорт подстановочных знаков не должен использоваться.

Ответ №1:

Как сказал Майкл Бутчер,

«tkinter.Изображение «перезаписывает» файл.Изображение» в пространстве имен вашего модуля. Избегайте импорта с *

Но если вы должны использовать импорт с подстановочным знаком, импорт tkinter перед PIL должен решить вашу проблему

 from tkinter import *
import os
import random
from PIL import Image
import time