PyQt QTreeWidget в Python — создание виджета-дерева
Класс 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)