coderoftheday
coderoftheday

Reputation: 2075

Using a class constructor to handle images tkinter

Hi i'm trying to create a class constructor to handle images in tkinter, since i'll be using many images in my code so I need a way to use images without using so much line of code.

I keep getting the error:

   return _modes[mode]
KeyError: 'picture.png'

Here's the code:

from tkinter import *
import tkinter
from random import randint

from PIL import Image
from PIL import ImageTk

root = tkinter.Tk()
root.geometry('700x700')

class PhotoHandler:
    def __init__(self,imagepath):
        self.imagepath = imagepath
        self.image = Image.open(self.imagepath)
        self.image = ImageTk.PhotoImage(self.imagepath)

    def returnn(self):
        return self.image

search = PhotoHandler('picture.png').returnn()

root.mainloop()

Upvotes: 0

Views: 198

Answers (1)

Mike67
Mike67

Reputation: 11342

You passed a string to the tkinter image. It expects a PIL image or mode. Since you passed a string, it thinks you're using an invalid mode. Pass the image instead:

class PhotoHandler:
    def __init__(self,imagepath):
        self.imagepath = imagepath
        self.image = Image.open(self.imagepath)
        self.image = ImageTk.PhotoImage(self.image)

    def returnn(self):
        return self.image

search = PhotoHandler('picture.png').returnn()

# add label for background image
background_label = tkinter.Label(root, image=search)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

root.mainloop()

Here's the documentation: https://pillow.readthedocs.io/en/4.2.x/reference/ImageTk.html

Upvotes: 2

Related Questions