Python Tkinter Treeview

ttk.Treeview displays a hierarchical collection of items and also displays tabular data. We can add child node so can create a view which can be expanded.

Tkitner Treeview to get Parent Child nodes and display data in hierarchical order
from tkinter import ttk
Treeview tree
Here is a basic Treeview with tree.
from tkinter import ttk
import tkinter as tk
# Creating tkinter my_w
my_w = tk.Tk()
# Using treeview widget
trv = ttk.Treeview(my_w, selectmode ='browse')

# column identifiers 
trv["columns"] = ("1", "2")
# Defining headings, other option is tree
trv['show'] = 'tree' 
# width of columns and alignment 
trv.column("#0", width = 80, anchor ='c')
trv.column("1", width = 10, anchor ='c')
trv.column("2", width = 100, anchor ='c')
# Headings  
# respective columns
trv.heading("#0", text ="Label",anchor='c')
trv.heading("1", text ="id")
trv.heading("2", text ="Name",anchor='c')


Watch the column with #0, this column will display in Tree and show the text part given in each row. The line saying trv['show'] = 'tree' can take the value as headings trv['show'] = 'headings' and the column with #0 will be hidden.

show option: trv['show'] = 'tree'

headings: Show the headings without the column marked as #0
tree: Show tree view with expanding the child node. No header row.
tree headings : (Default) Show both heading and expanding child node.
'' : Neither tree view nor headings are shown.

Treeview headings

Parent-child node

We can set the parent and child rows or nodes to the Treeview.
Treeview Parent-child nodes

Getting list of data from Treeview

for child in trv.get_children():
    #print(trv.item(child)["values"][1]) # for Name

On select event of treeview

def data_collect():
    p_id = trv.selection()[0] # collect selected row id
trv.bind("<<TreeviewSelect>>", data_collect())  

Displaying selected item value

def show():
    p_id = trv.selection()[0] # collect selected row id
    print(trv.item(p_id)) # Dictionary of all options
    print(trv.item(p_id)['values']) # List of values

Edit and update selected item value

Update data for selected Node
Here only the Name column data we will select and update. We kept one button to show the selected node value and another button to Update the name of the selected node.
def show():
    p_id = trv.selection()[0] # collect selected row id
    print(trv.item(p_id)) # Dictionary of all options
    print(trv.item(p_id)['values']) # List of values
def upd():
    p_id = trv.selection()[0] # collect selected row id
    trv.item(p_id, values=[trv.item(p_id)['values'][0],e1.get()])
Full code to Edit selected item of treeview is here

Reading all rows of Treeview

for line in trv.get_children():
For specific column value we can use like this

Delete all items of Treeview

for item in trv.get_children():

Options of Treeview

columnsColumn identifier strings. These are in addition to the icon column
cursorShape of the cursor when mouse is over it. A list of available cursor shapes are here.
displaycolumnsSelect columns to be displayed and the order
heightNumber of rows ( default value is 10 ).
paddingExtra space around the data inside the widget
selectmodebrowse | extend | none ,
browse : Select one item only
extend : Select more than one item
none : No selection
takefocusTrue | False , specify whether the widget is visited during focus traversal

Wrapping text

We have imported textwrap module. Added style to give the rowheight and created one function to wrap the text.
from tkinter import *
from tkinter import ttk
import textwrap
def wrap(string, length=20):
    return '\n'.join(textwrap.wrap(string, length))
my_w = Tk()
trv = ttk.Treeview(my_w, height=3)
trv['show'] = 'headings'
s = ttk.Style()
s.configure('Treeview', rowheight=60)
trv["columns"] = ("1", "2")
trv.column("1", width=100)
trv.column("2", width=100)
trv.heading("1", text="col 1")
trv.heading("2", text="col 2")
item = trv.insert("", "end", values=(wrap("This is long text,i want to wrap"),
                                         wrap("and this text also length is more")))
item = trv.insert("", "end", values=("No wrap","No Wrap"))
trv.grid(row=0, column=0)
Output is here.
Treeview with text wrpping

Adding scrollbar to Treeview

Vertical Scrollbar for Treeview
Since Treeview is used to show tabular data, we may have to show more rows by allowing the user to scroll up or down by using scrollbar.
How Vertical scrollbar is added to Treeview while displaying MySQL records

Adding horizontal Scrollbar

Update the column stretch=False
trv.column(i, anchor ='c', width=20,stretch = False)
hs = ttk.Scrollbar(my_w,orient="horizontal", command=trv.xview)#H Scrollbar 
trv.configure(xscrollcommand=hs.set)  # connect to Treeview

Using Google sheets data with Treeview

Treeview data from Python Google sheets
We can collect data from google sheet and use as data for a Treeview by using pygsheets library and google drive API.
Data of Treeview from Google sheet data

Using Excel data with Treeview

Treeview data from MS Excel
We can collect data from MS Excel by using openpyxl library and use as data for a Treeview
Excel Data to create Treeview
Managing style of Treeview Treeview insert Records of MySQL Pagination of Records of MySQL Delete Records Treeview using data from Google sheet Select -Edit-update MySQL Product table using Treeview Dynamic Creation of Header & Columns in Treeview Query window & displaying records in Treeview Generating Invoice by adding products using Treeview Showing directory and file structure using Treeview Showing record details in a Treeview
Tkinter Report - Monthly
Subscribe to our YouTube Channel here


* indicates required
Subscribe to plus2net

    Post your comments , suggestion , error , requirements etc here

    Python Video Tutorials
    Python SQLite Video Tutorials
    Python MySQL Video Tutorials
    Python Tkinter Video Tutorials
    We use cookies to improve your browsing experience. . Learn more
    HTML MySQL PHP JavaScript ASP Photoshop Articles FORUM . Contact us
    ©2000-2022 All rights reserved worldwide Privacy Policy Disclaimer