In a QListWidget I have a set of entries. Now I want to allow the user to sort (reorder) these entries through two buttons (Up/Down).
Here's part of my code:
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
Well, after trying in different ways, this is solved by taking the selected entry and inserting it into a new position.
For the Up Button is something like this:
currentRow = self.ventana.listWidget.currentRow()
currentItem = self.ventana.listWidget.takeItem(currentRow)
self.ventana.listWidget.insertItem(currentRow - 1, currentItem)
And for the Down Button it's the same, except that in the third line the "-" sign is changed by a "+".
I know you got your answer. But here's a little advice or you can say advancement to your Project.
listwidget.setDragDropMode(QAbstractItemView.InternalMove)
listwidget.model().rowsMoved.connect(lambda: anyfunction())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With