Как реализовать функцию перемещения строк таблицы вниз?

Возникла проблема с реализацией функции перемещения строк таблицы вниз. Необходимо реализовать функцию таким образом, чтобы она перемещала вниз выделенные строки(сохраняя исходный порядок выделенных строк) и сохраняла выделение этих строк.

(Возможно поможет) Подобная функция, но с перемещением вверх реализована следующим образом:

def up_func():
    selected_rows = ui.table.selectionModel().selectedRows()
    if not selected_rows:
        return

    # Сортируем строки по возрастанию, чтобы перемещать их корректно
    selected_rows.sort(key=lambda index: index.row())

    # Определяем минимальную строку, чтобы не выйти за пределы
    min_row = selected_rows[0].row()
    if min_row == 0:
        return 
     
    new_rows = []

    # Перемещение строк
    for row in selected_rows:
        current_row = row.row()
        items = [ui.table.takeItem(current_row, col) for col in range(ui.table.columnCount())]
        
        # Вставляем строку выше
        ui.table.insertRow(current_row - 1)
        for col, item in enumerate(items):
            ui.table.setItem(current_row - 1, col, item)

        # Удаляем оригинальную строку
        ui.table.removeRow(current_row + 1)

        # Сохраняем новую позицию для выделения
        new_rows.append(current_row - 1)

    # Выделяем перемещенные строки
    selection = QtCore.QItemSelection()
    for new_row in new_rows:
        top_left = ui.table.model().index(new_row, 0)  # Получаем QModelIndex для верхней левой ячейки
        bottom_right = ui.table.model().index(new_row, ui.table.columnCount() - 1)  # Получаем QModelIndex для нижней правой ячейки
        selection.select(top_left, bottom_right)  # Добавляем в выделение

    ui.table.selectionModel().select(selection, QtCore.QItemSelectionModel.Select)

есть предыдущая реализация, но она работает только с одной строкой, а нужно реализовать работу с несколькими:

def down_func():
    row = ui.table.currentRow()
    column = ui.table.currentColumn();
    if row < ui.table.rowCount()-1:
        ui.table.insertRow(row+2)
        for i in range(ui.table.columnCount()):
            ui.table.setItem(row+2,i,ui.table.takeItem(row,i))
            ui.table.setCurrentCell(row+2,column)
        ui.table.removeRow(row) 

Ответы (0 шт):