【问题标题】:Allow user to select a file or a folder in QFileDialog允许用户在 QFileDialog 中选择文件或文件夹
【发布时间】:2011-01-25 16:50:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    据我所知,您需要编写自己的 QFileDialog 并设置正确的mode。我相信这应该是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();
    }
    

    【讨论】:

    • 我不认为这是正确的——QFileDialog 不接受多文件模式。 (你可以知道,因为枚举值不是 2 的幂)
    猜你喜欢
    • 2016-04-08
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多