January 18, 2023
Перемещение строки вверх и вниз в QTableWidget
Рассмотрим виджет QTableWidget и две кнопки «двигаться вверх» и «двигаться вниз». При нажатии на «Переместить вверх» текущая строка должна переместиться на одну строку вверх, аналогично «перемещению вниз».
Как проще всего реализовать соответствующие функции перемещения вверх и вниз?
def move_down(self): """ Перемещение строки в таблице вниз. Определяем индекс текущей строки и столбца. Сравниваем текущий индекс строки. Если он меньше, чем текущий индекс - 1, создаем новую строку. Запускаем цикл в диапазоне количества столбцов, перемещаем содержимое вниз. После цикла удаляем строку, которую нужно было переместить. """ row = self.ui.fileView.currentRow() column = self.ui.fileView.currentColumn() if row < self.ui.fileView.rowCount() - 1: self.ui.fileView.insertRow(row + 2) for i in range(self.ui.fileView.columnCount()): self.ui.fileView.setItem(row + 2, i, self.ui.fileView.takeItem(row, i)) self.ui.fileView.setCurrentCell(row + 2, column) self.ui.fileView.removeRow(row) def move_up(self): """ Перемещение строки в таблице вверх. Повторяем все те же операции, но сравниваем индекс текущей строки с нулем. Пока он больше, можем перемещать. """ row = self.ui.fileView.currentRow() column = self.ui.fileView.currentColumn() if row > 0: self.ui.fileView.insertRow(row - 1) for i in range(self.ui.fileView.columnCount()): self.ui.fileView.setItem(row - 1, i, self.ui.fileView.takeItem(row + 1, i)) self.ui.fileView.setCurrentCell(row - 1, column) self.ui.fileView.removeRow(row + 1)