0

我正在使用以下代码在 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)

But I couldn't find an option to get the index positions when multiple lines are selected, though 'self.listWidget.selectedItems()' returns the texts in the selected items, I couldn't figure out how to move multiple lines up or向下。

4

1 回答 1

0

只需循环遍历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)
于 2021-06-15T12:58:08.303 回答