Для определения дерева параметру show виджета Treeview передается значение tree
(дерево без заголовка) или
tree headings
(дерево с заголовком).
Определим простейшее дерево:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") # создаем дерево tree = ttk.Treeview(show="tree") tree.pack(expand=1, fill=BOTH) # добавляем данные tree.insert("", END, iid=1, text="Административный отдел") tree.insert("", END, iid=2, text="IT-отдел") tree.insert("", END, iid=3, text="Отдел продаж") root.mainloop()
Здесь данные для отображения представлены условно представлены списком отделов некоторого предприятия.
Каждый отдел добавляется как элемент верхнего уровня, поэтому в методе tree.insert
в качестве первого аргумента указывается пустая строка "".
Также устанавливаем для каждого добавляемого элемента параметр text
- название отдела и его идентификатор - параметр iid
. Конечно, мы могли бы положиться на tkinter, который установил бы идентификаторы автоматически.
Однако ручная установка идентификаторов потом упростить добавление в них вложенныхи элементов.
В итоге получится следующее дерево:
Однако визуально пока никакого дерева по сути нет, а сами данные не являются иерархическими. Но теперь добавим в некоторые отделы сотрудников:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") tree = ttk.Treeview(show="tree") tree.pack(expand=1, fill=BOTH) # добавляем отделы tree.insert("", END, iid=1, text="Административный отдел", open=True) tree.insert("", END, iid=2, text="IT-отдел") tree.insert("", END, iid=3, text="Отдел продаж") # добавим сотрудников отдела tree.insert(1, index=END, text="Tom") tree.insert(2, index=END, text="Bob") tree.insert(2, index=END, text="Sam") root.mainloop()
При добавлении каждого сотрудника указываем в качестве первого параметра идентификатор элемента-отдела.
tree.insert(2, index=END, text="Bob")
Также устанавливаем текстовую метку элемента - параметр text
- он представляет имя условного сотрудника.
По умолчанию все элементы, которые содержат вложенные подэлементы, закрыты. Чтобы их отрыть по умолчанию, у элемента для параметра open
передается значение True
(по умолчанию равно False):
tree.insert("", END, iid=1, text="Административный отдел", open=True)
Если в Treeview параметр show имеет значение "tree headings" (это значение по умолчанию), то мы можем также установить заголовок:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") tree = ttk.Treeview() # установка заголовка tree.heading("#0", text="Отделы", anchor=NW) tree.pack(expand=1, fill=BOTH) tree.insert("", END, iid=1, text="Административный отдел", open=True) tree.insert("", END, iid=2, text="IT-отдел") tree.insert("", END, iid=3, text="Отдел продаж") tree.insert(1, index=END, text="Tom") tree.insert(2, index=END, text="Bob") tree.insert(2, index=END, text="Sam") root.mainloop()