dan*_*n_g 3 python qt pyqt qtreeview qfiledialog
我正在尝试创建一个允许用户选择多个目录的 QFileDialog。
遵循此处的讨论和此处的常见问题解答,但我不确定我做错了什么。我得到一个文件对话框,但它仍然只允许我选择一个目录(文件夹)。
这是在 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_())
Run Code Online (Sandbox Code Playgroud)
编辑:
所以在玩了更多之后,如果我在文件对话框中选择“详细信息视图”,多选就可以了。但是,如果我选择“列表视图”,则它不起作用。知道为什么吗?
FAQ 中的示例代码并不健壮,因为它假设对话框只有 1QListView
和 1 QTreeView
。findChild
当有几个直接的子对象时,的行为是不确定的:所以它曾经工作过可能只是纯粹的运气。
更强大的解决方案是在其模型类型为 a 的任何视图上重置选择模式QFileSystemModel
:
for view in self.findChildren((QListView, QTreeView)):
if isinstance(view.model(), QFileSystemModel):
view.setSelectionMode(QAbstractItemView.ExtendedSelection)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2764 次 |
最近记录: |