#python #pyqt5 #qlistwidget #pyqt6
Вопрос:
Я использую следующий код для перемещения одного элемента вверх в виджете списка PyQt6
def move_item_up_in_list_box(self):
row = self.listWidget.currentRow()
text = self.listWidget.currentItem().text()
self.listWidget.insertItem(row-1, text)
self.listWidget.takeItem(row 1)
self.listWidget.setCurrentRow(row-1)
Но я не смог найти возможность получить позиции индекса при выборе нескольких строк, хотя
«self.ListWidget.SelectedItems ()» возвращает тексты в выбранных элементах, я не мог понять, как перемещать несколько строк вверх или вниз.
Комментарии:
1.
selectedItems()
не возвращает «сообщения». Он возвращает список выбранных элементов .2. да, я просто повторил список и использовал .text() для вывода текста, как я могу получить позиции индекса выбранных элементов?
Ответ №1:
Просто пройдите по циклу selectedItems()
и используйте row()
, чтобы получить строку каждого из них.
for item in self.listWidget.selectedItems():
row = self.listWidget.row(item)
# ...
Учтите, что модель выбора обычно сохраняет порядок, в котором были выбраны элементы, поэтому вы всегда должны переупорядочивать элементы перед их перемещением, и помните, что если вы перемещаете элементы вниз, они должны быть перемещены в обратном порядке.
def move_items(self, down=False):
items = []
for item in self.listWidget.selectedItems():
items.append((self.listWidget.row(item), item))
items.sort(reverse=down)
delta = 1 if down else -1
for row, item in items:
self.listWidget.takeItem(row)
self.listWidget.insertItem(row delta, item)
Комментарии:
1. Спасибо за точные детали, порядок выбора, сортировка, изменение списка для перемещения вниз-все это было блестяще продумано!
2. @JackZero Добро пожаловать! Помните, что если ответ решает вашу проблему, вы должны отметить его как принятый, нажав на серую галочку слева от него. (Кстати, я исправил неправильную ссылку на виджет списка, которую я забыл заменить
w
,self.listWidget
когда вставлял код обратно)