5

在 QListWidget 我有一组条目。现在我想允许用户通过两个按钮(向上/向下)对这些条目进行排序(重新排序)。

这是我的代码的一部分:

def __init__(self):
    QtGui.QMainWindow.__init__(self)

    self.ventana = Ui_MainWindow()
    self.ventana.setupUi(self)

    self.connect(self.ventana.btExit, QtCore.SIGNAL('clicked()'), QtCore.SLOT('close()'))

    self.connect(self.ventana.btAdd, QtCore.SIGNAL('clicked()'), self.addButton)
    self.connect(self.ventana.btQuit, QtCore.SIGNAL('clicked()'), self.quitButton)
    self.connect(self.ventana.btQuitAll, QtCore.SIGNAL('clicked()'), self.quitAllButton)
    self.connect(self.ventana.btUp, QtCore.SIGNAL('clicked()'), self.upButton)
    self.connect(self.ventana.btDown, QtCore.SIGNAL('clicked()'), self.downButton)

def addButton(self):
    fileNames = QtGui.QFileDialog.getOpenFileNames(self, 'Agregar archivos')
    self.ventana.listWidget.addItems(fileNames)

def quitButton(self):
    item = self.ventana.listWidget.takeItem(self.ventana.listWidget.currentRow())
    item = None

def quitAllButton(self):
    self.ventana.listWidget.clear()

def upButton(self):
   # HOW TO MOVE ITEM
4

2 回答 2

12

好吧,在以不同的方式尝试之后,通过获取所选条目并将其插入新位置来解决此问题。

对于向上按钮是这样的:

    currentRow = self.ventana.listWidget.currentRow()
    currentItem = self.ventana.listWidget.takeItem(currentRow)
    self.ventana.listWidget.insertItem(currentRow - 1, currentItem)

对于向下按钮,它是相同的,除了在第三行中的“-”符号被“+”更改。

于 2012-06-09T20:17:44.423 回答
2

更好的方法

我知道你得到了答案。但这里有一个小建议,或者你可以说你的项目有进步。

listwidget.setDragDropMode(QAbstractItemView.InternalMove)
listwidget.model().rowsMoved.connect(lambda: anyfunction())
  1. 此代码的第 1 行将允许您将项目拖动到任何位置并在几秒钟内更改它。
  2. 此代码的第 2 行将允许在您完成拖放后触发一个函数。
于 2022-01-20T08:11:00.990 回答