Как реализовать функцию перемещения строк таблицы вниз?
Возникла проблема с реализацией функции перемещения строк таблицы вниз. Необходимо реализовать функцию таким образом, чтобы она перемещала вниз выделенные строки(сохраняя исходный порядок выделенных строк) и сохраняла выделение этих строк.
(Возможно поможет) Подобная функция, но с перемещением вверх реализована следующим образом:
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)