Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
