Разрешить пользователю выбирать файл или папку в QFileDialog - PullRequest
5 голосов
/ 10 марта 2010

В PyQt вы можете сделать что-то вроде следующего, чтобы позволить пользователю выбрать файл

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

Однако я хотел бы открыть QFileDialog, в котором пользователь сможет выбрать либо файл, либо каталог. Я уверен, что я видел эту функцию в приложениях PyQt раньше, но я не могу найти какой-либо способ сделать это.

1 Ответ

0 голосов
/ 10 марта 2010

Из того, что я помню, вам нужно написать свой собственный 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...