Cоздание иерархического дерева на python на основании данных из excel
Есть данные в эксель таблице(скрине только кусок файла, на самом деле там огромная структура):
Необходимо на основании этих данных написать программу на Python, которая будет отображать эти данные в виде дерева (как на примере ниже):
Иерархия на самом деле сложная и громоздкая, в файле Excel присутствую такие поля как ID папки, ее название, ID родительской структуры и уровень вложенности.
....пересматривал кучу примеров с tkinter Treeview, QTreeWidget, ни одного подходящего примера не нашел. Подскажите, пожалуйста, как проще всего сделать ? Я данные из эксель переливал в словарь но дальше не понятно как мне циклом их загрузить в само дерево.
Ответы (1 шт):
Используем pandas и PyQt6.TreeWidget ознакомьтесь с примером:
import sys
import pandas as pd
from PyQt6.QtWidgets import QApplication, QWidget, QHBoxLayout, QTreeWidgetItem, QTreeWidget
class MainWindow(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('Example')
self.resize(640, 480)
layout = QHBoxLayout()
self.setLayout(layout)
self.tree_view = QTreeWidget(self)
self.layout().addWidget(self.tree_view)
self.load_xlsx('file.xlsx')
self.show()
def load_xlsx(self, path):
df = pd.read_excel(path) # Читаем exel файл с помощью pandas
elements = {}
items = []
for row in df.values:
element = QTreeWidgetItem([row[1], row[0]]) # Создаём новый элемент
elements[row[0]] = element
for row in df.values:
element = elements[row[0]]
if str(row[2]) == 'nan': # Если элемент не является предком кого либо
items.append(element) # Добавляем его в список корневых элементов
else:
elements[row[2]].addChild(element) # Иначе добавляем его родителю в качестве элемента
self.tree_view.insertTopLevelItems(0, items) # Добавляем все корневые элементы на дерево
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec())


