Permitir al usuario seleccionar un archivo o una carpeta en QFileDialog

En PyQt puede hacer algo como lo siguiente para permitir que el usuario seleccione un archivo

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

Sin embargo, me gustaría que se QFileDialog un QFileDialog en el que el usuario podría seleccionar un archivo o un directorio. Estoy seguro de que he visto esta característica en las aplicaciones PyQt antes, pero parece que no puedo encontrar ninguna manera de hacerlo.

Por lo que recuerdo, necesitas escribir tu propio QFileDialog y configurar el modo apropiado. Creo que esto debería ser QFileDialog.ExistingFile & QFileDialog.Directory .

Puede intentar escribir su propio método estático basándose en getExisitingDirectory (desde el repository de 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(); }