How to place an image into a frame in Tkinter?

To place an image into a Tkinter frame, you need to use the Pillow (PIL) library along with Tkinter. This allows you to load and display various image formats within your GUI application.

Required Libraries

First, ensure you have the required libraries installed ?

pip install pillow

Basic Implementation

Here's how to create a frame and place an image inside it ?

# Import required libraries
from tkinter import *
from PIL import ImageTk, Image

# Create an instance of tkinter window
win = Tk()

# Define the geometry of the window
win.geometry("700x500")

# Create a frame with specified dimensions
frame = Frame(win, width=600, height=400, bg="lightgray")
frame.pack()
frame.place(anchor='center', relx=0.5, rely=0.5)

# Load and display the image
img = ImageTk.PhotoImage(Image.open("forest.jpg"))
label = Label(frame, image=img)
label.pack()

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

win.mainloop()

Step-by-Step Breakdown

Step 1: Import Libraries

Import tkinter for GUI components and PIL for image handling.

Step 2: Create Main Window

Set up the main window with geometry() to define its size.

Step 3: Create Frame

Create a frame container and position it using place() with anchor='center' for center alignment.

Step 4: Load Image

Use ImageTk.PhotoImage() to load the image file. This converts the image to a format compatible with Tkinter.

Step 5: Display Image

Create a Label widget inside the frame and assign the image to it.

Alternative Approach with Error Handling

Here's a more robust version with error handling ?

from tkinter import *
from PIL import ImageTk, Image
import os

def load_image_in_frame():
    win = Tk()
    win.title("Image in Frame")
    win.geometry("700x500")
    
    # Create frame
    frame = Frame(win, width=600, height=400, bg="white", relief="solid", bd=2)
    frame.pack(pady=20)
    frame.place(anchor='center', relx=0.5, rely=0.5)
    
    try:
        # Check if image file exists
        image_path = "forest.jpg"
        if os.path.exists(image_path):
            # Load and resize image if needed
            image = Image.open(image_path)
            image = image.resize((580, 380), Image.Resampling.LANCZOS)
            img = ImageTk.PhotoImage(image)
            
            label = Label(frame, image=img)
            label.pack(padx=10, pady=10)
            label.image = img  # Keep reference
        else:
            # Display error message if image not found
            error_label = Label(frame, text="Image file not found!", 
                              font=("Arial", 16), fg="red")
            error_label.pack(expand=True)
            
    except Exception as e:
        error_label = Label(frame, text=f"Error loading image: {str(e)}", 
                          font=("Arial", 12), fg="red")
        error_label.pack(expand=True)
    
    win.mainloop()

# Call the function
load_image_in_frame()

Key Points

  • Always keep a reference to the image object (label.image = img) to prevent garbage collection

  • Use PIL.Image for image manipulation and ImageTk.PhotoImage for Tkinter compatibility

  • Consider resizing large images to fit within your frame dimensions

  • Add error handling for missing image files or unsupported formats

Supported Image Formats

With Pillow, you can load various image formats including JPEG, PNG, GIF, BMP, and TIFF. Without Pillow, Tkinter only supports GIF and PPM/PGM formats natively.

Conclusion

Placing images in Tkinter frames requires the Pillow library for format support. Always maintain image references and consider adding error handling for robust applications.

Updated on: 2026-03-26T18:33:25+05:30

82K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements