Python Tkinter – How to display a table editor in a text widget?

Tkinter is a Python-based GUI toolkit that is used to create full-fledged desktop applications. Tkinter has a variety of modules and class libraries to help developers create user-friendly applications quickly and easily.

The Text widget in tkinter provides users a way to create a text editor that accepts multiline user-input. You can configure and customize its properties and attributes. To display tabular data using Text widgets, we create multiple Text widgets arranged in a grid pattern where each widget acts as a cell in the table.

Approach

To create a table-like structure using Text widgets, follow these steps ?

  • Import the required libraries

  • Create a 2-dimensional array containing your table data

  • Use nested loops to iterate through rows and columns

  • Create a Text widget for each cell

  • Use the grid(row, col) geometry manager to arrange widgets in table format

  • Insert the corresponding data into each Text widget

Example

Here's a complete example that creates an editable table using Text widgets ?

# Import the required libraries
from tkinter import *

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

# Set the size and title of the window
win.geometry("700x350")
win.title("Table Editor using Text Widgets")

# Create a 2D array with sample data
table_data = [
    ("1", "2", "3", "4", "5", "6", "7"),
    ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"),
    ("aaa", "acc", "add", "aee", "abb", "abd", "acd"),
    ("A", "B", "C", "D", "E", "F", "G")
]

# Create Text widgets in a grid layout
for row in range(4):
    for col in range(7):
        text_widget = Text(win, width=10, height=3)
        text_widget.grid(row=row, column=col, padx=2, pady=2)
        text_widget.insert(END, table_data[row][col])

# Start the GUI event loop
win.mainloop()

The output displays an editable table where each cell is a separate Text widget ?

A grid of Text widgets arranged in 4 rows and 7 columns, 
displaying numbers, days of the week, text strings, and letters.
Each cell is editable and can accept multiline input.

Key Features

  • Editable Cells: Each Text widget can be edited independently

  • Multiline Support: Text widgets support multiline content in each cell

  • Grid Layout: Uses the grid geometry manager for proper table alignment

  • Customizable: You can modify width, height, and other Text widget properties

Enhanced Example with Styling

from tkinter import *

win = Tk()
win.geometry("800x400")
win.title("Styled Table Editor")

# Sample data for a product inventory
inventory_data = [
    ("Product", "Price", "Stock", "Category"),
    ("Laptop", "$999", "25", "Electronics"),
    ("Mouse", "$29", "150", "Electronics"),
    ("Chair", "$199", "8", "Furniture")
]

# Create styled Text widgets
for row in range(4):
    for col in range(4):
        text_widget = Text(win, width=12, height=2, wrap=WORD)
        
        # Style header row differently
        if row == 0:
            text_widget.config(bg="lightblue", font=("Arial", 10, "bold"))
        else:
            text_widget.config(bg="white", font=("Arial", 10))
        
        text_widget.grid(row=row, column=col, padx=3, pady=3, sticky="nsew")
        text_widget.insert(END, inventory_data[row][col])

win.mainloop()

Limitations

While this approach creates an editable table, it has some limitations compared to dedicated table widgets ?

  • No built-in sorting or filtering capabilities

  • Each cell is an independent widget, consuming more memory

  • No automatic row/column selection or navigation

Conclusion

Using Text widgets in a grid layout provides a simple way to create an editable table in Tkinter. While not as feature-rich as dedicated table components, this approach offers flexibility and is suitable for small datasets that need inline editing capabilities.

---
Updated on: 2026-03-26T18:57:38+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements