Isaac Volpe
Isaac Volpe

Reputation: 161

tkinter.TclError: couldn't recognize data in image file

I'm currently in the middle of a recorded Python lecture and I think the version of python the teacher is using is outdated and he is writing a tkinter program but after copying it I keep getting this error:

Traceback (most recent call last):
  File "C:\Users\1234\AppData\Local\Programs\Python\Python36-32\Lecture Class 11.py", line 35, in <module>
    photo = PhotoImage(file="Me With My 5th Place.jpg")
  File "C:\Users\1234\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 3539, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "C:\Users\1234\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 3495, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "Me With My 5th Place.jpg"

And here is my code:

from tkinter import *

class Application(Frame):
    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.button_clicks = 0
        self.create_widgets()

    def create_widgets(self):
        self.label1 = Label(self)
        label1.image = photo
        label1.grid()
        self.button1 = Button(self)
        self.button1["text"] = "Click me!!!"
        self.button1["command"] = self.update_count
        self.button1.grid(row=1, column=1)
        self.button2 = Button(self)
        self.button2["text"] = "Reset click counter"
        self.button2["command"] = self.reset_count
        self.button.grid(row=3, column= 1)

    def update_count(self):
        self.button_clicks += 1
        self.button1["text"] = "Total clicks: " + str(self.button_clicks)

    def res_count(self):
        self.button_clicks = 0
        self.button["text"] = "I am reset. Click me!!!"

root = Tk()
root.title("CP101 click counter")
root.geometry("400x400")

photo = PhotoImage(file="Me With My 5th Place.jpg")

app = Application(root)

root.mainloop()

Upvotes: 1

Views: 18613

Answers (2)

Nae
Nae

Reputation: 15335

.jpg is not supported by default by tkinter. You can use .jpg files using PIL:

try:                        # In order to be able to import tkinter for
    import tkinter as tk    # either in python 2 or in python 3
except:
    import Tkinter as tk
from PIL import Image, ImageTk


if __name__ == '__main__':
    root = tk.Tk()

    label = tk.Label(root)
    img = Image.open(r"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg")
    label.img = ImageTk.PhotoImage(img)
    label['image'] = label.img

    label.pack()
    root.mainloop()

Upvotes: 10

Xantium
Xantium

Reputation: 11605

This is quite normal. Tkinter does not yet support .jpg files. To solve the problem you want to either to convert your file to .png, .gif or similar or use Pillow module to add support for .jpg files.

Upvotes: 5

Related Questions