How to disable column resizing in a Treeview widget in Tkinter?

The Treeview widget in Tkinter provides a powerful way to display hierarchical data in a tabular format. By default, users can resize columns by dragging column dividers. In certain cases, you may want to disable this feature to maintain consistent layout and control over the widget's appearance.

Understanding Treeview Column Resizing

The Treeview widget allows interactive column resizing by clicking and dragging column dividers. While useful in some scenarios, there are situations where preventing column width modifications ensures consistent layout aligned with your design choices.

Disabling Column Resizing

To disable column resizing, use the column() method with the stretch=False parameter and specify a fixed width. This prevents users from modifying column widths.

Example

Here's how to disable column resizing in a Treeview widget ?

import tkinter as tk
from tkinter import ttk

# Create main window
root = tk.Tk()
root.title("Disable Column Resizing")
root.geometry("500x300")

# Create Treeview widget
tree = ttk.Treeview(root)
tree["columns"] = ("column1", "column2", "column3")

# Configure the tree column (leftmost column)
tree.column("#0", width=0, stretch=False)
tree.heading("#0", text="", anchor="w")

# Disable column resizing for each column
for column in tree["columns"]:
    tree.column(column, stretch=False, width=120)
    tree.heading(column, text=column.capitalize())

tree.pack(pady=20, padx=20, fill="both", expand=True)

# Add sample data
data = [
    ("Item 1", "Value 1", "Category A"),
    ("Item 2", "Value 2", "Category B"),
    ("Item 3", "Value 3", "Category A"),
    ("Item 4", "Value 4", "Category B"),
    ("Item 5", "Value 5", "Category A")
]

for item in data:
    tree.insert("", "end", values=item)

root.mainloop()

The output displays a Treeview with three columns that cannot be resized ?

A window opens showing a Treeview widget with fixed-width columns displaying the sample data. Column dividers cannot be dragged to resize.

Key Parameters

The column()

Parameter Value Effect
stretch False Prevents column from expanding
width Integer Sets fixed column width in pixels
minwidth Integer Sets minimum column width

Best Practices

When disabling column resizing, consider these enhancements:

  • Appropriate Column Widths ? Calculate widths based on expected content length to avoid text truncation

  • Horizontal Scrollbar ? Add scrollbars for tables with many columns or wide content

  • User Feedback ? Consider tooltips to explain why columns cannot be resized

Example with Scrollbar

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Fixed Columns with Scrollbar")
root.geometry("400x300")

# Create frame for treeview and scrollbar
frame = ttk.Frame(root)
frame.pack(fill="both", expand=True, padx=10, pady=10)

# Create treeview with scrollbar
tree = ttk.Treeview(frame)
scrollbar = ttk.Scrollbar(frame, orient="horizontal", command=tree.xview)
tree.configure(xscrollcommand=scrollbar.set)

# Configure columns
tree["columns"] = ("col1", "col2", "col3", "col4", "col5")
tree.column("#0", width=0, stretch=False)

for col in tree["columns"]:
    tree.column(col, stretch=False, width=150)
    tree.heading(col, text=f"Column {col[-1]}")

# Pack widgets
tree.pack(side="top", fill="both", expand=True)
scrollbar.pack(side="bottom", fill="x")

# Add data
for i in range(10):
    tree.insert("", "end", values=(f"Data {i}-1", f"Data {i}-2", 
                                   f"Data {i}-3", f"Data {i}-4", f"Data {i}-5"))

root.mainloop()

Conclusion

Disabling column resizing in Treeview widgets ensures consistent layout by setting stretch=False and fixed width values. This technique provides better control over widget appearance and maintains design integrity across different user interactions.

Updated on: 2026-03-27T16:05:21+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements