Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python QFileDialog是否查看文件夹和文件,但仅选择文件夹?_Python_Qt_Pyqt_Qfiledialog - Fatal编程技术网

Python QFileDialog是否查看文件夹和文件,但仅选择文件夹?

Python QFileDialog是否查看文件夹和文件,但仅选择文件夹?,python,qt,pyqt,qfiledialog,Python,Qt,Pyqt,Qfiledialog,我正在使用以下代码创建自己的自定义文件对话框: file_dialog = QtGui.QFileDialog() file_dialog.setFileMode(QtGui.QFileDialog.Directory) file_dialog.setViewMode(QtGui.QFileDialog.Detail) file_dialog.setOption(QtGui.QFileDialog.DontUseNativeDialog, True) 我感兴趣的行为是用户能够同时查看文件和文件

我正在使用以下代码创建自己的自定义文件对话框:

file_dialog = QtGui.QFileDialog()
file_dialog.setFileMode(QtGui.QFileDialog.Directory)
file_dialog.setViewMode(QtGui.QFileDialog.Detail)
file_dialog.setOption(QtGui.QFileDialog.DontUseNativeDialog, True)
我感兴趣的行为是用户能够同时查看文件和文件夹,但只能选择文件夹。(使文件不可选择)。可能吗

注意: 使用
DirectoryOnly
选项对我不好,因为它不允许您查看文件,只允许查看文件夹

编辑(我忘了添加额外代码,该代码负责选择多个文件夹,而不是一个):


要防止选择文件,可以安装一个代理模型,该模型可以操纵文件视图中项目的标志:

dialog = QFileDialog()
dialog.setFileMode(QFileDialog.Directory)
dialog.setOption(QFileDialog.DontUseNativeDialog, True)

class ProxyModel(QIdentityProxyModel):
    def flags(self, index):
        flags = super(ProxyModel, self).flags(index)
        if not self.sourceModel().isDir(index):
            flags &= ~Qt.ItemIsSelectable
            # or disable all files
            # flags &= ~Qt.ItemIsEnabled
        return flags

proxy = ProxyModel(dialog)
dialog.setProxyModel(proxy)

dialog.exec()

您发布的代码完全符合您的要求(即用户可以查看文件和目录,但只能选择目录)。所以,也许你需要更清楚地解释你想要实现的目标。不是真的。。上面的代码也允许您选择文件。对我来说,“选择”按钮只有在我选择目录时才会启用。可以选择文件,但不能选择它们(因为该按钮已禁用)。这有点尴尬,但我刚刚发现还有另一段代码对此负责。这是一个允许我选择多个文件夹而不是一个文件夹的代码,但这样做的同时也给了我我提到的问题。我用该代码编辑了我的原始帖子。请参阅我的最后一条评论;)好的,太好了,谢谢!我不确定我是否应该为此提出一个新问题(让我知道)-但我是否可以对上面的代码进行快速修改,以便能够同时选择文件夹和文件?@YaronGh
file\u dialog.setProxyModel(None)
。如果我这样做,它将返回所选文件以及该对话框中的所有其他文件folder@YaronGh. 你必须更清楚地解释你要做什么。我试图同时选择文件和文件夹,让“文件”对话框返回这些文件和文件夹的路径。
dialog = QFileDialog()
dialog.setFileMode(QFileDialog.Directory)
dialog.setOption(QFileDialog.DontUseNativeDialog, True)

class ProxyModel(QIdentityProxyModel):
    def flags(self, index):
        flags = super(ProxyModel, self).flags(index)
        if not self.sourceModel().isDir(index):
            flags &= ~Qt.ItemIsSelectable
            # or disable all files
            # flags &= ~Qt.ItemIsEnabled
        return flags

proxy = ProxyModel(dialog)
dialog.setProxyModel(proxy)

dialog.exec()