._.
This commit is contained in:
parent
42a4fe0539
commit
173e2dbfdb
@ -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__":
|
||||
Loading…
x
Reference in New Issue
Block a user