This commit is contained in:
Андрей Дувакин 2025-01-07 17:59:29 +05:00
parent 42a4fe0539
commit 173e2dbfdb

View File

@ -14,17 +14,23 @@ class DepartmentGraph(QGraphicsView):
self.setScene(self.scene)
with connect() as session:
self.departments = session.query(Department).all() # Список департаментов с их иерархией
self.nodes = {}
self.render_graph()
def render_graph(self):
root_departments = [d for d in self.departments if d.parent_id is None]
x, y = 50, 50 # Начальные координаты
spacing = 2500 # Если один корневой элемент, оставить стандартное
x = 50 # Начальная координата X
y = 50 # Начальная координата Y
for root in root_departments:
self.add_department_node(root, x, y)
x += 200 # Расстояние между корневыми узлами
x += spacing # Увеличиваем X для следующего корневого элемента
def add_department_node(self, department, x, y, parent_item=None):
def add_department_node(self, department, x, y, parent_item=None, level=0):
# Создаем кнопку
button = QPushButton(department.title)
proxy = QGraphicsProxyWidget()
@ -45,9 +51,11 @@ class DepartmentGraph(QGraphicsView):
# Рекурсивно добавляем подразделы
child_departments = [d for d in self.departments if d.parent_id == department.id]
child_x = x - len(child_departments) * 100 // 2
for child in child_departments:
self.add_department_node(child, child_x, y + 100, proxy)
child_x += 200
for index, child in enumerate(child_departments):
# Чередуем высоту (шашечное расположение)
offset_y = (index % 2) * 150 # Смещение по оси Y для чередования
self.add_department_node(child, child_x, y + 100 + offset_y, proxy, level + 1)
child_x += 150
if __name__ == "__main__":