我正在尝试创建一个QFileDialog,允许用户选择多个目录.
在讨论here和faq here之后,但我不确定自己在做什么错.我得到一个文件对话框,但它仍然只允许我选择一个目录(文件夹).
这是在Windows 7上
码:
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_())
编辑:
因此,在进行更多操作之后,如果我在文件对话框中选择“详细信息视图”,则多选有效.但是,如果我选择“列表视图”,则它不起作用.知道为什么吗?
解决方法:
FAQ中的示例代码并不可靠,因为它假定对话框只有一个QListView和一个QTreeView.当有多个直接子对象时,findChild的行为是不确定的:因此,它曾经起作用可能只是纯粹的运气.
一个更可靠的解决方案是在其模型类型为QFileSystemModel的任何视图上重置选择模式:
for view in self.findChildren((QtGui.QListView, QtGui.QTreeView)):
if isinstance(view.model(), QtGui.QFileSystemModel):
view.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)