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.

Пример с использованием PyQt 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)
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *