PyQt QFileDialog – Selección de múltiples directorios

Estoy intentando crear un QFileDialog que permite al usuario seleccionar varios directorios.

Siguiendo la discusión aquí y las preguntas frecuentes aquí , pero no estoy seguro de lo que estoy haciendo mal. Aparece un cuadro de diálogo de archivo, pero aún así solo me permite seleccionar un solo directorio (carpeta).

Esto está en Windows 7

Código:

class FileDialog(QtGui.QFileDialog): def __init__(self, *args): QtGui.QFileDialog.__init__(self, *args) self.setOption(self.DontUseNativeDialog, True) self.setFileMode(self.DirectoryOnly) self.tree = self.findChild(QtGui.QTreeView) self.tree.setSelectionMode(QtGui.QAbstractItemView.MultiSelection) self.list = self.findChild(QtGui.QListView) self.list.setSelectionMode(QtGui.QAbstractItemView.MultiSelection) if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) ex = FileDialog() ex.show() sys.exit(app.exec_()) 

Editar:

Entonces, después de jugar un poco más con esto, si selecciono “Vista detallada” en el cuadro de diálogo del archivo, la selección múltiple funciona. Sin embargo, si selecciono “Vista de lista” no funciona. ¿Alguna idea de por qué?

El código de ejemplo de las preguntas frecuentes no es robusto, porque asume que el diálogo solo tiene un QListView y un QTreeView . El comportamiento de findChild es indeterminado cuando hay varios objetos secundarios directos: así que probablemente fue pura suerte que alguna vez funcionó.

Una solución más robusta sería restablecer el modo de selección en cualquier vista para la que el tipo de su modelo sea un modelo de sistema de QFileSystemModel :

 for view in self.findChildren((QtGui.QListView, QtGui.QTreeView)): if isinstance(view.model(), QtGui.QFileSystemModel): view.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)