Класс PyQt QTreeWidget используется в Python для создания виджета-дерева, отображающего иерархические данные.
Знакомство с классом PyQt QTreeWidget
Класс QTreeWidget позволяет создать виджет древовидного типа, состоящий из элементов. Элементы дерева имеют родительские/дочерние отношения. Класс QTreeWidgetItem представляет элемент дерева.
Чтобы создать виджет-дерево, выполните следующие действия:
- Сначала создайте объект QTreeWidget:
tree = QTreeWidget(parent)
Аргумент parent — это родительский виджет или главное окно.
- Во-вторых, задайте количество столбцов для дерева с помощью метода setColumnCount():
tree.setColumnCount(column_count)
- В-третьих, задайте метки заголовков для столбцов виджета дерева с помощью метода setHeaderLabels():
tree.setHeaderLabels(headers)
- В-четвертых, создайте новый объект QTreeWidgetItem и задайте текст элемента:
item = QTreeWidgetItem(tree) item.setText(column_index, item_text)
Первый аргумент метода setText() — это индекс столбца, начинающийся с нуля, а второй аргумент — текст элемента.
При желании вы можете установить значок для элемента дерева:
item.setIcon(column_index, QIcon(icon_path))
Чтобы добавить элемент как дочерний элемент другого элемента, используйте метод addChild() класса QTreeWidgetItem:
item.addChild(child_item)
Пример PyQt QTreeWidget
Мы разработаем простую программу, которая отображает отделы и сотрудников отделов с помощью QTreeWidget.

Вот программа:
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QTreeWidget, QTreeWidgetItem
from PyQt6.QtCore import Qt,QSize
from PyQt6.QtGui import QIcon, QAction
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('PyQt QTreeWidget')
self.setGeometry(100, 100, 400, 200)
# tree
tree = QTreeWidget(self)
tree.setColumnCount(2)
tree.setHeaderLabels(['Departments', 'Employees'])
departments = ['Sales','Marketing','HR']
employees = {
'Sales': ['John','Jane','Peter'],
'Marketing': ['Alice','Bob'],
'HR': ['David'],
}
# addition data to the tree
for department in departments:
department_item = QTreeWidgetItem(tree)
department_item.setText(0,department)
# set the child
for employee in employees[department]:
employee_item = QTreeWidgetItem(tree)
employee_item.setText(1,employee)
department_item.addChild(employee_item)
# place the tree on the main window
self.setCentralWidget(tree)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
Как это работает.
- Сначала создайте новый QTreeWidget, настройте его столбцы и задайте метки заголовков:
tree = QTreeWidget(self) tree.setColumnCount(2) tree.setHeaderLabels(['Departments', 'Employees'])
- Во-вторых, подготовьте данные для отображения в виджете дерева:
departments = ['Sales','Marketing','HR']
employees = {
'Sales': ['John','Jane','Peter'],
'Marketing': ['Alice','Bob'],
'HR': ['David'],
}
- В-третьих, добавьте отделы в первый столбец дерева. Для каждого отдела добавьте сотрудников во второй столбец и в качестве дочерних элементов отдела:
for department in departments:
department_item = QTreeWidgetItem(tree)
department_item.setText(0,department)
# set the children
for employee in employees[department]:
employee_item = QTreeWidgetItem(tree)
employee_item.setText(1,employee)
department_item.addChild(employee_item)
- Наконец, поместите виджет дерева в качестве центрального виджета главного окна:
self.setCentralWidget(tree)
