diff --git a/Desktop/main.py b/Desktop/1.py similarity index 73% rename from Desktop/main.py rename to Desktop/1.py index 1207008..c37f743 100644 --- a/Desktop/main.py +++ b/Desktop/1.py @@ -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__":