Delete and Edit items in Tkinter TreeView

Tkinter Treeview widget is used to display data in a hierarchical structure where each row can represent a file or directory. The Treeview widget items can be edited and deleted by selecting them using tree.selection() function and then performing operations on the selected items.

Creating a Treeview Widget

To create a Treeview widget, we use the Treeview(parent, columns) constructor ?

import tkinter as tk
from tkinter import ttk

# Create the main window
root = tk.Tk()
root.geometry("700x350")
root.title("Treeview Edit and Delete Example")

# Create a Treeview widget
tree = ttk.Treeview(root, columns=("c1", "c2"), show='headings', height=8)

# Configure columns
tree.column("c1", anchor=tk.CENTER, width=100)
tree.heading("c1", text="ID")
tree.column("c2", anchor=tk.CENTER, width=200)
tree.heading("c2", text="Company")

# Insert sample data
tree.insert('', 'end', values=('1', 'Honda'))
tree.insert('', 'end', values=('2', 'Hyundai'))
tree.insert('', 'end', values=('3', 'Tesla'))
tree.insert('', 'end', values=('4', 'Volkswagen'))
tree.insert('', 'end', values=('5', 'Tata Motors'))
tree.insert('', 'end', values=('6', 'Renault'))

tree.pack(pady=20)

root.mainloop()

Delete Operation

To delete an item, we first get the selected item using tree.selection() and then use tree.delete() ?

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox

root = tk.Tk()
root.geometry("700x400")
root.title("Delete Treeview Items")

# Create Treeview
tree = ttk.Treeview(root, columns=("c1", "c2"), show='headings', height=8)
tree.column("c1", anchor=tk.CENTER, width=100)
tree.heading("c1", text="ID")
tree.column("c2", anchor=tk.CENTER, width=200)
tree.heading("c2", text="Company")

# Insert data
companies = [('1', 'Honda'), ('2', 'Hyundai'), ('3', 'Tesla'), 
             ('4', 'Volkswagen'), ('5', 'Tata Motors'), ('6', 'Renault')]

for company in companies:
    tree.insert('', 'end', values=company)

tree.pack(pady=20)

def delete_item():
    try:
        selected_item = tree.selection()[0]
        tree.delete(selected_item)
        print("Item deleted successfully")
    except IndexError:
        messagebox.showwarning("Selection Error", "Please select an item to delete")

# Delete button
delete_btn = ttk.Button(root, text="Delete Selected", command=delete_item)
delete_btn.pack(pady=5)

root.mainloop()

Edit Operation

To edit an item, we select it and use tree.item() to modify its values ?

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox

root = tk.Tk()
root.geometry("700x450")
root.title("Edit Treeview Items")

# Create Treeview
tree = ttk.Treeview(root, columns=("c1", "c2"), show='headings', height=8)
tree.column("c1", anchor=tk.CENTER, width=100)
tree.heading("c1", text="ID")
tree.column("c2", anchor=tk.CENTER, width=200)
tree.heading("c2", text="Company")

# Insert data
companies = [('1', 'Honda'), ('2', 'Hyundai'), ('3', 'Tesla'), 
             ('4', 'Volkswagen'), ('5', 'Tata Motors'), ('6', 'Renault')]

for company in companies:
    tree.insert('', 'end', values=company)

tree.pack(pady=20)

def edit_item():
    try:
        selected_item = tree.selection()[0]
        # Get current values
        current_values = tree.item(selected_item, 'values')
        
        # Create edit window
        edit_window = tk.Toplevel(root)
        edit_window.title("Edit Item")
        edit_window.geometry("300x150")
        
        tk.Label(edit_window, text="ID:").pack(pady=5)
        id_entry = tk.Entry(edit_window)
        id_entry.insert(0, current_values[0])
        id_entry.pack(pady=5)
        
        tk.Label(edit_window, text="Company:").pack(pady=5)
        company_entry = tk.Entry(edit_window)
        company_entry.insert(0, current_values[1])
        company_entry.pack(pady=5)
        
        def save_changes():
            new_id = id_entry.get()
            new_company = company_entry.get()
            tree.item(selected_item, values=(new_id, new_company))
            edit_window.destroy()
        
        tk.Button(edit_window, text="Save", command=save_changes).pack(pady=10)
        
    except IndexError:
        messagebox.showwarning("Selection Error", "Please select an item to edit")

# Edit button
edit_btn = ttk.Button(root, text="Edit Selected", command=edit_item)
edit_btn.pack(pady=5)

root.mainloop()

Complete Example with Both Operations

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox

class TreeviewEditor:
    def __init__(self, root):
        self.root = root
        self.root.geometry("700x450")
        self.root.title("Treeview Edit and Delete Operations")
        
        self.create_widgets()
        self.populate_data()
    
    def create_widgets(self):
        # Create Treeview
        self.tree = ttk.Treeview(self.root, columns=("c1", "c2"), show='headings', height=10)
        self.tree.column("c1", anchor=tk.CENTER, width=100)
        self.tree.heading("c1", text="ID")
        self.tree.column("c2", anchor=tk.CENTER, width=200)
        self.tree.heading("c2", text="Company")
        self.tree.pack(pady=20)
        
        # Button frame
        btn_frame = tk.Frame(self.root)
        btn_frame.pack(pady=10)
        
        # Buttons
        ttk.Button(btn_frame, text="Edit Selected", command=self.edit_item).pack(side=tk.LEFT, padx=5)
        ttk.Button(btn_frame, text="Delete Selected", command=self.delete_item).pack(side=tk.LEFT, padx=5)
    
    def populate_data(self):
        companies = [('1', 'Honda'), ('2', 'Hyundai'), ('3', 'Tesla'), 
                     ('4', 'Volkswagen'), ('5', 'Tata Motors'), ('6', 'Renault')]
        
        for company in companies:
            self.tree.insert('', 'end', values=company)
    
    def delete_item(self):
        try:
            selected_item = self.tree.selection()[0]
            self.tree.delete(selected_item)
            print("Item deleted successfully")
        except IndexError:
            messagebox.showwarning("Selection Error", "Please select an item to delete")
    
    def edit_item(self):
        try:
            selected_item = self.tree.selection()[0]
            current_values = self.tree.item(selected_item, 'values')
            
            # Simple edit - just change to predefined values for demo
            self.tree.item(selected_item, values=("99", "Updated Company"))
            print("Item updated successfully")
            
        except IndexError:
            messagebox.showwarning("Selection Error", "Please select an item to edit")

# Create and run the application
root = tk.Tk()
app = TreeviewEditor(root)
root.mainloop()

Key Methods Summary

Method Purpose Usage
tree.selection() Get selected items Returns tuple of selected item IDs
tree.delete(item) Delete an item Removes item from treeview
tree.item(item, values=...) Edit an item Updates item values
tree.item(item, 'values') Get item values Returns current item values

Conclusion

Use tree.selection() to get selected items, tree.delete() to remove items, and tree.item() to modify values. Always handle the IndexError when no item is selected to provide better user experience.

Updated on: 2026-03-25T23:29:01+05:30

18K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements