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

5 投票
1 回答
4826 浏览
提问于 2025-04-15 20:13

在PyQt中,你可以像下面这样做,让用户选择一个文件。

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

不过,我想要一个QFileDialog对话框,用户可以在里面选择一个文件或者一个文件夹。我记得在以前的PyQt应用程序中见过这个功能,但我现在找不到实现的方法。

1 个回答

0

根据我记得的,你需要自己写一个 QFileDialog,并设置合适的 模式。我认为这个模式应该是 QFileDialog.ExistingFile & QFileDialog.Directory

你可以尝试写一个自己的静态方法,基于 getExisitingDirectory(来自 C++ 的库):

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();
}

撰写回答