Resize the Tkinter Listbox widget when the window resizes

Tkinter Listbox widgets display scrollable lists of items that users can select from. By default, Listbox widgets maintain a fixed size when the window is resized. However, you can make them resize dynamically with the window using specific packing options.

To make a Listbox widget resize with the window, use expand=True and fill=BOTH properties. The expand property allows the widget to grow into available space, while fill=BOTH stretches the widget both vertically and horizontally.

Basic Resizable Listbox

Here's how to create a Listbox that resizes with the window ?

import tkinter as tk

# Create main window
win = tk.Tk()
win.geometry("750x250")
win.title("Resizable Listbox Example")

# Create listbox widget with resize properties
listbox = tk.Listbox(win)
listbox.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)

# Add items to the listbox
languages = ["Python", "Java", "C++", "Rust", "GoLang", "C#", "JavaScript", "R", "PHP"]
for i, language in enumerate(languages, 1):
    listbox.insert(i, language)

win.mainloop()

The output displays a listbox containing programming languages that will resize when you drag the window corners.

Key Properties Explained

Understanding the packing options is crucial for proper resizing ?

Property Purpose Effect
expand=True Allow growth Widget expands into available space
fill=BOTH Direction of stretch Stretches horizontally and vertically
padx, pady Spacing Adds padding around the widget

Alternative: Using Grid Manager

You can also achieve resizable behavior using the grid geometry manager ?

import tkinter as tk

win = tk.Tk()
win.geometry("600x400")
win.title("Grid-based Resizable Listbox")

# Configure grid weights for resizing
win.grid_rowconfigure(0, weight=1)
win.grid_columnconfigure(0, weight=1)

# Create listbox using grid
listbox = tk.Listbox(win)
listbox.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")

# Add sample data
fruits = ["Apple", "Banana", "Cherry", "Date", "Elderberry", "Fig", "Grape"]
for fruit in fruits:
    listbox.insert(tk.END, fruit)

win.mainloop()

The sticky="nsew" parameter makes the widget stick to all four sides (North, South, East, West), enabling full resizing capability.

Comparison of Methods

Method Complexity Best For
Pack with expand/fill Simple Single widget layouts
Grid with weights Moderate Complex multi-widget layouts

Conclusion

Use expand=True and fill=BOTH with pack() for simple resizable Listbox widgets. For complex layouts with multiple widgets, consider using grid() with appropriate weight configurations and sticky options.

Updated on: 2026-03-25T19:36:51+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements