Python 允许用户在QFileDialog中选择文件或文件夹

Python 允许用户在QFileDialog中选择文件或文件夹,python,pyqt,Python,Pyqt,在PyQt中,您可以执行如下操作,以允许用户选择文件 filename = QtGui.QFileDialog.getOpenFileName(self, "Choose file..") 但是,我希望打开一个QFileDialog,用户可以在其中选择文件或目录。我确信我以前在PyQt应用程序中看到过这个功能,但我似乎找不到任何方法来实现它。根据我的记忆,您需要编写自己的QFileDialog并设置正确。我相信这应该是QFileDialog.ExistingFile&QFileDialog.D

在PyQt中,您可以执行如下操作,以允许用户选择文件

filename = QtGui.QFileDialog.getOpenFileName(self, "Choose file..")

但是,我希望打开一个
QFileDialog
,用户可以在其中选择文件或目录。我确信我以前在PyQt应用程序中看到过这个功能,但我似乎找不到任何方法来实现它。

根据我的记忆,您需要编写自己的QFileDialog并设置正确。我相信这应该是
QFileDialog.ExistingFile&QFileDialog.Directory

您可以尝试基于GETExISITIN目录(从C++存储库)编写自己的静态方法:


我认为这是不对的——QFileDialog不接受多种文件模式。(可以看出,因为枚举值不是2的幂)
QString QFileDialog::getExistingDirectory(QWidget *parent,
                                          const QString &caption,
                                          const QString &dir,
                                          Options options)
{
    if (qt_filedialog_existing_directory_hook && !(options & DontUseNativeDialog))
        return qt_filedialog_existing_directory_hook(parent, caption, dir, options);
    QFileDialogArgs args;
    args.parent = parent;
    args.caption = caption;
    args.directory = QFileDialogPrivate::workingDirectory(dir);
    args.mode = (options & ShowDirsOnly ? DirectoryOnly : Directory);
    args.options = options;

#if defined(Q_WS_WIN)
    if (qt_use_native_dialogs && !(args.options & DontUseNativeDialog) && (options & ShowDirsOnly)
#if defined(Q_WS_WINCE)
        && qt_priv_ptr_valid
#endif
        ) {
        return qt_win_get_existing_directory(args);
    }
#endif

    // create a qt dialog
    QFileDialog dialog(args);
    if (dialog.exec() == QDialog::Accepted) {
        return dialog.selectedFiles().value(0);
    }
    return QString();
}