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)