Python treeview get children

Виджет Treeview. Создание таблиц и деревьев

Виджет Treeview предназначен для отображения иерархических данных, причем как в виде дерева, так и в виде таблицы. Среди параметров Treeview следует отметить следующие:

  • columns : столбцы таблицы в виде строки или списка/кортежа строк
  • displaycolumns : отображаемые столбцы таблицы
  • cursor : курсор при наведении на виджет
  • height : высота виджета
  • padding : отступы от границ виджета до содержимого
  • selectmode : режим выбора элементов в виджете
  • show : формат отображения данных. Может принимать одно из следующих значений:
    • tree : отображает столбец #0
    • heading : отображает строку с заголовками
    • tree headings : отображает столбец #0 и строку с заголовками
    • «» : не отображает ни столбец #0, ни строку с заголовками

    Управление данными

    Добавление элементов

    Для добавления данных применяется метод insert() :

    insert: (parent, index, iid, values) -> str

    Этот метод создает новый элемент и возвращает его идентификатор, который по умолчанию представляет строку наподобие «IOO1». Основные параметры метода:

    • parent : представляет идентификатор родительского элемента, в который добавляется элемент. Если создается элемент верхнего уровня, для которого не существует никакого родительского элемента, как, например, в случае с добавлением строки в таблицу, то передается пустая строка.
    • index : указывает индекс для вставки элемента. Если элемент добавляется в конец, то используется значение END или «end» , либо указывается число, которое равно количеству элементов или больше его. Если элемент добавляется в самое начало, то указывается 0 или число меньше нуля.
    • iid : если указан данный параметр, то его значение будет использоваться в качестве идентификатора элемента. При этом подобный в виджете не должно быть элемента с подобным идентификатором, иначе генерируется новый идентификатор, как в обшем случае
    • values : список или кортеж значений, которые и составляют добавляемый элемент

    Удаление элементов

    Для удаления данных применяется метод delete() :

    В качестве параметра метод принимает удаляемые данные

    Перемещение элементов

    Для перемещения элемента на другую позицию применяется метод move() :

    Этот метод создает новый элемент и возвращает его идентификатор, который по умолчанию представляет строку наподобие «IOO1». Основные параметры метода:

    • item : идентификатор элемента, который надо переместить.
    • parent : представляет родительский элемент перемещаемого элемента .
    • index : индекс, на который перемещается элемент

    Получение элементов

    Для получения элементов применяется метод get_children() :

    Он принимает идентификатор элемента, дочерние элементы которого надо получить, и возвращает набор идентификаторов полученных элементов:

    for k in treeview.get_children(""): print(k)

    В данном случае k представляет идентификатор элемент.

    В качестве параметра в get_children() передается элемент в Treeview, дочерние элементы которого мы хотим получить. Если надо получить элементы верхнего уровня (например, строки таблицы), то передается пустая строка.

    Конкретный элемент по ключу с помощью метода item() , в который передается идентификатор элемента:

    for k in treeview.get_children(""): print(treeview.item(k))

    в данном случае treeview.item(k) возвратит набор значений элемента в Treeview (например, всю строку).

    Если нам надо получить не весь набор значений, а только одно значение (отдельную ячейку строки), то применяется метод set() , в который передается идентификатор элемента и номер столбца:

    for k in treeview.get_children(""): print(treeview.set(k, 0))

    В данном случае получаем значение первой ячейки строки (при табличном отображении).

    Изменение значений

    Если надо изменить один столбец, то применяется метод set()

    • item : идентификатор элемента, который надо изменить.
    • column : индекс элемента в кортеже (столбца в строке), который надо изменить.
    • value : новое значение

    Здесь значение в первом столбце элемента с меняется на строку «Admin»

    Если надо изменить вообще весь элемент со всеми его значениями, то применяется метод item()

    • item : идентификатор элемента, который надо изменить.
    • values : кортеж с новыми значениями
    treeview.item("I003", values=("Tim", 34, "tim@email.com"))

    Здесь элемент с в качестве значений принимает кортеж («Tim», 34, «tim@email.com»)

    В следующих статьях рассмотрим применение этих методов.

    Источник

    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

    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() my_w.geometry("260x280") my_w.title("www.plus2net.com") # Using treeview widget trv = ttk.Treeview(my_w, selectmode ='browse') trv.grid(row=1,column=1,padx=30,pady=20) # 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') trv.insert("",'end',iid=1,text='First',values=(1,'n1-Alex')) trv.insert("",'end',iid=2,text='second',values=(2,'n2-Ravi')) trv.insert("",'end',iid=3,text='third',values=(3,'n3-Ronn')) my_w.mainloop()

    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

    Getting list of data from Treeview

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

    On select event of treeview

    def data_collect(): print("hi") p_id = trv.selection()[0] # collect selected row id trv.bind(">", 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 b1=tk.Button(my_w,text='Show',command=show) b1.grid(row=2,column=1)

    Adding Buttons to move UP or DOWN the row selection

    from tkinter import ttk import tkinter as tk my_w = tk.Tk() my_w.geometry("450x380") # width and height of window my_w.title("www.plus2net.com") # title of the window i=0 def my_move(direction): global i if(direction=='Up'): # Up button is clicked i=int(i)-1 else: i=int(i)+1 trv.selection_set(i) bt1=tk.Button(my_w,text='Up',command=lambda:my_move('Up')) bt1.grid(row=1,column=0,padx=5,pady=10) bt2=tk.Button(my_w,text='Down',command=lambda:my_move('Down')) bt2.grid(row=1,column=1,padx=5,pady=10) trv=ttk.Treeview(my_w,selectmode='browse',show='headings') trv.grid(row=2,column=0,columnspan=3,padx=30,pady=10) # column identifiers trv["columns"] = ("1", "2","3","4") trv.column("1", width = 50, anchor ='w') trv.column("2", width = 150, anchor ='c') trv.column("3", width = 100, anchor ='c') trv.column("4", width = 70, anchor ='c') trv.heading(1, text ="id",anchor='w') trv.heading(2, text ="Name",anchor='c') trv.heading(3, text ="Class",anchor='c') trv.heading(4, text ="Mark",anchor='c') trv.insert("",'end',iid=1,values=(1,'Alex1','Four',78)) trv.insert("",'end',iid=2,values=(2,'Alex2','Four',80)) trv.insert("",'end',iid=3,values=(4,'Alex3','Four',78)) trv.insert("",'end',iid=4,values=(5,'Alex4','Five',80)) trv.insert("",'end',iid=5,values=(6,'Alex5','Sixr',40)) trv.insert("",'end',iid=6,values=(7,'Alex6','Four',70)) trv.insert("",'end',iid=7,values=(8,'Alex7','Three',50)) #trv.selection_set('b') #p_id=trv.selection()[0] #print(p_id) def data_collect(*args): global i i=trv.selection()[0] #iid value of the selection print(i) trv.bind(">",data_collect) # On select event or row my_w.mainloop()

    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()]) b1=tk.Button(my_w,text='Show',command=show) b1.grid(row=2,column=2) e1=tk.Entry(my_w) e1.grid(row=3,column=1) b1=tk.Button(my_w,text='Update',command=upd) b1.grid(row=3,column=2)

    Reading all rows of Treeview

    for line in trv.get_children(): print(trv.item(line)['values'])

    Delete all items ( rows ) of Treeview

    get_children() returns the list of children belonging to item. If item is not specified, returns root children.
    Here we are removing all rows.

    for item in trv.get_children(): trv.delete(item)
    trv.delete(*trv.get_children())# delete all rows from treeview

    Options of Treeview

    Options Details
    columns Column identifier strings. These are in addition to the icon column
    cursor Shape of the cursor when mouse is over it. A list of available cursor shapes are here.
    displaycolumns Select columns to be displayed and the order
    height Number of rows ( default value is 10 ).
    padding Extra space around the data inside the widget
    selectmode browse | extend | none ,
    browse : Select one item only
    extend : Select more than one item
    none : No selection
    takefocus True | 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) my_w.mainloop()

    Treeview with text wrpping

    Output is here.

    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.

    vs = ttk.Scrollbar(my_w,orient="vertical", command=trv.yview)#V Scrollbar trv.configure(yscrollcommand=vs.set) # connect to Treeview vs.grid(row=1,column=2,sticky='ns')

    Adding horizontal Scrollbar

    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 hs.grid(row=2,column=1,sticky='ew')

    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 »

    plus2net.com

    Python programming Basics ⇩

    Источник

    Читайте также:  Json decode php примеры
Оцените статью