How do I insert a JPEG image into a Python Tkinter window?

Python provides the Pillow (PIL) package to support, process, and display images in Tkinter applications. While Tkinter natively supports PPM, PNG, and GIF formats, JPEG images require the Pillow library for proper handling.

To display a JPEG image in a Tkinter window, we use the ImageTk.PhotoImage class from PIL along with a Label widget. The Label widget serves as a container to display both text and images on the window.

Installing Pillow

First, ensure you have Pillow installed ?

pip install Pillow

Basic JPEG Display Example

Here's how to load and display a JPEG image in a Tkinter window ?

import tkinter as tk
from PIL import ImageTk, Image

# Create an instance of tkinter window
win = tk.Tk()
win.title("JPEG Image Display")

# Define the geometry of the window
win.geometry("650x400")

# Create a sample image (since we can't load external files in demo)
# In practice, you would use: img = ImageTk.PhotoImage(Image.open("your_image.jpg"))
from PIL import Image
sample_img = Image.new('RGB', (200, 150), color='lightblue')
img = ImageTk.PhotoImage(sample_img)

# Create a Label Widget to display the image
label = tk.Label(win, image=img)
label.pack(fill="both", expand="yes")

# Keep a reference to prevent garbage collection
label.image = img

print("Image loaded successfully in Tkinter window")
Image loaded successfully in Tkinter window

Loading from File Path

When working with actual JPEG files, use this approach ?

import tkinter as tk
from PIL import ImageTk, Image

# Create an instance of tkinter window
win = tk.Tk()
win.title("JPEG Image Display")
win.geometry("650x400")

# Load JPEG image from file
try:
    # Initialize the file path
    path = "your_image.jpg"  # Replace with actual image path
    
    # Create an object of tkinter ImageTk
    original_image = Image.open(path)
    img = ImageTk.PhotoImage(original_image)
    
    # Create a Label Widget to display the image
    label = tk.Label(win, image=img)
    label.pack(fill="both", expand="yes")
    
    # Keep a reference to prevent garbage collection
    label.image = img
    
except FileNotFoundError:
    # Display error message if image not found
    error_label = tk.Label(win, text="Image file not found!", fg="red")
    error_label.pack(expand=True)

win.mainloop()

Resizing JPEG Images

Often, you'll need to resize images to fit your window properly ?

import tkinter as tk
from PIL import ImageTk, Image

# Create window
win = tk.Tk()
win.title("Resized JPEG Display")
win.geometry("400x300")

# Create a sample image and resize it
original_image = Image.new('RGB', (800, 600), color='lightgreen')
resized_image = original_image.resize((300, 200))
img = ImageTk.PhotoImage(resized_image)

# Display resized image
label = tk.Label(win, image=img)
label.pack(pady=20)

# Keep reference
label.image = img

print(f"Original size: {original_image.size}")
print(f"Resized to: {resized_image.size}")
Original size: (800, 600)
Resized to: (300, 200)

Key Points

  • Pillow Required: JPEG support requires the Pillow library installation
  • Reference Keeping: Always keep a reference to the image object to prevent garbage collection
  • Error Handling: Use try-except blocks when loading external image files
  • Resizing: Use Image.resize() to adjust image dimensions before display

Common Image Formats

Format Tkinter Native Requires Pillow
PPM Yes No
PNG Yes No
GIF Yes No
JPEG/JPG No Yes

Conclusion

Displaying JPEG images in Tkinter requires the Pillow library and proper reference management. Use ImageTk.PhotoImage to convert PIL images for Tkinter compatibility, and always maintain a reference to prevent image disposal.

---
Updated on: 2026-03-25T18:27:48+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements