问题
I am trying to create a QFileDialog that allows the user to select multiple directories.
Following the discussion here and the faq here, but I'm not sure what I'm doing wrong. I get a file dialog, but it still only lets me select a single directory (folder).
This is on Windows 7
Code:
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_())
Edit:
So after playing around with this some more, if I select "Detail View" in the file dialog, multiselection works. However, if I select "List View" it does not work. Any idea why?
回答1:
The example code from the FAQ is not robust, because it assumes the dialog only has one QListView
and one QTreeView
. The behaviour of findChild
is indeterminate when there are several direct child objects: so it was probably just pure luck that it ever worked.
A more robust solution would be to reset the selection mode on any view for which the type of its model is a QFileSystemModel
:
for view in self.findChildren((QtGui.QListView, QtGui.QTreeView)):
if isinstance(view.model(), QtGui.QFileSystemModel):
view.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
来源:https://stackoverflow.com/questions/28544425/pyqt-qfiledialog-multiple-directory-selection