如何在 PyQt 列表小部件中一次向上或向下移动多行?

How to move multiple lines at once up or down in PyQt List Widget?

我正在使用以下代码在 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()' returns 所选项目中的文本,我不知道如何向上或向下移动多行。

只需循环 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)