QTreeView : get a list of the items highlighted only (Multiple selection)

1.6k Views Asked by At

I would like to get the folder pathes of a multiple selection. I wish to get only the ones that are highlighted when clicking. Ideally, a list would be updated interactively. I mean, if one folder is deselected, it is automatically removed from the list.

Here an example of QTreeView below ... Can you provide support please?

Thank you

from PyQt4 import QtCore, QtGui

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.resize(1150, 905)
        self.gridLayout_2 = QtGui.QGridLayout(Dialog)
        self.groupBox     = QtGui.QGroupBox(Dialog)
        self.gridLayout   = QtGui.QGridLayout(self.groupBox)
        self.treeView     = QtGui.QTreeView(self.groupBox)
        self.gridLayout.addWidget(self.treeView, 0, 0, 1, 1)
        self.gridLayout_2.addWidget(self.groupBox, 0, 0, 1, 2)
        self.fileSystemModel = QtGui.QFileSystemModel(self.treeView)
        self.fileSystemModel.setFilter(QtCore.QDir.AllDirs | QtCore.QDir.NoDotAndDotDot | QtCore.QDir.AllEntries)
        self.fileSystemModel.setReadOnly(True)
        self.root = self.fileSystemModel.setRootPath('/home/')
        self.treeView.setModel(self.fileSystemModel)
        self.treeView.setRootIndex(self.root)
        self.treeView.setSelectionMode(QtGui.QAbstractItemView.ContiguousSelection)   

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())
1

There are 1 best solutions below

0
On

You can use the selectedIndexes() method of QItemSelectionModel.

from PyQt4 import QtCore, QtGui

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.resize(1150, 905)
        self.gridLayout_2 = QtGui.QGridLayout(Dialog)
        self.groupBox     = QtGui.QGroupBox(Dialog)
        self.gridLayout   = QtGui.QGridLayout(self.groupBox)
        self.treeView     = QtGui.QTreeView(self.groupBox)
        self.gridLayout.addWidget(self.treeView, 0, 0, 1, 1)
        self.gridLayout_2.addWidget(self.groupBox, 0, 0, 1, 2)
        self.fileSystemModel = QtGui.QFileSystemModel(self.treeView)
        self.fileSystemModel.setFilter(QtCore.QDir.AllDirs | 
            QtCore.QDir.NoDotAndDotDot | QtCore.QDir.AllEntries)
        self.fileSystemModel.setReadOnly(True)
        self.root = self.fileSystemModel.setRootPath('/home/')
        self.treeView.setModel(self.fileSystemModel)
        self.treeView.setRootIndex(self.root)
        self.treeView.setSelectionMode(QtGui.QAbstractItemView.ContiguousSelection)
        self.treeView.selectionModel().selectionChanged.connect(self.getItems)


    def getItems(self):
        selected = self.treeView.selectionModel().selectedIndexes()
        for index in selected:
            if index.column() == 0:
                print self.fileSystemModel.data(index,
                    self.fileSystemModel.FileNameRole).toString()

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())