2017-07-19 5 views
0

Je voudrais obtenir les chemins d'accès d'un dossier de sélection multiple. Je souhaite obtenir seulement ceux qui sont surlignés en cliquant. Idéalement, une liste serait mise à jour de manière interactive. Je veux dire, si un dossier est désélectionné, il est automatiquement supprimé de la liste.QTreeView: obtenir une liste des éléments en surbrillance seulement (Sélection multiple)

Voici un exemple de QTreeView ci-dessous ... Pouvez-vous fournir un soutien s'il vous plaît?

Merci

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_()) 

Répondre

1

Vous pouvez utiliser la méthode selectedIndexes() de 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_()) 
+0

Ça a l'air bien! Je vous remercie. :) – user3046026