AttributeError: type object 'Image' has no attribute 'open' Was Tun (Python, PIL)?
Ich habe ein Kleines Programm begonnen aber wen ich ein Bild einfügen möchte kommt immer diese Fehlermeldung:
AttributeError: type object 'Image' has no attribute 'open'
Hier ist mein Script(Alle Module sind auf dem neusten stand.):
from PIL import Image, ImageTk
import tkinter as tk
from tkinter import *
root = tk.Tk()
root.title("Ein Fenster")
canv = Canvas(root, width=80, height=80, bg='white')
canv.grid(row=2, column=3)
img = ImageTk.PhotoImage(Image.open("logo.png")) # PIL solution
canv.create_image(20, 20, anchor=NW, image=img)
2 Antworten
Du bindest zwei unterschiedliche Image-Typen in deinem Skript ein. Zum einen das von PIL und zum anderen das von tkinter. Der Interpreter sucht nun im falschen Typ nach einer open-Methode.
Entferne einfach:
from tkinter import *
Du bindest tkinter eh bereits in Zeile 2 ein. Die tkinter-Typen musst du in Folge alle über dein Alias tk aufrufen.
tkinter besitzt auch ein Image, du fabrizierst also eine Namenskollision.
Normalerweise würde man ein:
import PIL
import tkinter
Du benutzt ja bei tkinter schon eine Umbenennung, verzichte doch einfach darauf alles von tkinter in den Haputnamensraum zu ziehen.
Was Du auch machen könntest:
from PIL import Image as PILImg, ImageTk as PILImgTk
....
img=PILImgTk.PhotoImage(PILImg.open('logo.png'))
Nur um mal weitere Möglichkeiten zu erörtern.