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