._.
This commit is contained in:
parent
42a4fe0539
commit
173e2dbfdb
@ -14,17 +14,23 @@ class DepartmentGraph(QGraphicsView):
|
|||||||
self.setScene(self.scene)
|
self.setScene(self.scene)
|
||||||
with connect() as session:
|
with connect() as session:
|
||||||
self.departments = session.query(Department).all() # Список департаментов с их иерархией
|
self.departments = session.query(Department).all() # Список департаментов с их иерархией
|
||||||
|
|
||||||
self.nodes = {}
|
self.nodes = {}
|
||||||
self.render_graph()
|
self.render_graph()
|
||||||
|
|
||||||
def render_graph(self):
|
def render_graph(self):
|
||||||
root_departments = [d for d in self.departments if d.parent_id is None]
|
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:
|
for root in root_departments:
|
||||||
self.add_department_node(root, x, y)
|
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)
|
button = QPushButton(department.title)
|
||||||
proxy = QGraphicsProxyWidget()
|
proxy = QGraphicsProxyWidget()
|
||||||
@ -45,9 +51,11 @@ class DepartmentGraph(QGraphicsView):
|
|||||||
# Рекурсивно добавляем подразделы
|
# Рекурсивно добавляем подразделы
|
||||||
child_departments = [d for d in self.departments if d.parent_id == department.id]
|
child_departments = [d for d in self.departments if d.parent_id == department.id]
|
||||||
child_x = x - len(child_departments) * 100 // 2
|
child_x = x - len(child_departments) * 100 // 2
|
||||||
for child in child_departments:
|
for index, child in enumerate(child_departments):
|
||||||
self.add_department_node(child, child_x, y + 100, proxy)
|
# Чередуем высоту (шашечное расположение)
|
||||||
child_x += 200
|
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__":
|
if __name__ == "__main__":
|
||||||
Loading…
x
Reference in New Issue
Block a user