Posterior a consultar con expertos en el tema, programadores de varias áreas y profesores dimos con la solución al dilema y la dejamos plasmada en este post.
Solución:
Si usas el static QFileDialog
funciones, obtendrá un nativo file-dialog, por lo que estará limitado a la funcionalidad proporcionada por la plataforma. Puede consultar la documentación de su plataforma para ver si la funcionalidad que desea está disponible.
Si no está disponible, tendrás que conformarte con Qt’s incorporado file-dialog y agregue sus propias características. Para su caso de uso específico, esto debería ser fácil, porque el cuadro de diálogo incorporado ya parece tener lo que desea. Tiene una barra lateral que muestra una lista de “Lugares” a los que el usuario puede navegar directamente. Puede configurar sus propios lugares de esta manera:
dialog = QtGui.QFileDialog(self, 'Audio Files', directory, filter)
dialog.setFileMode(QtGui.QFileDialog.DirectoryOnly)
dialog.setSidebarUrls([QtCore.QUrl.fromLocalFile(place)])
if dialog.exec_() == QtGui.QDialog.Accepted:
self._audio_file = dialog.selectedFiles()[0]
Aquí hay una función de conveniencia para abrir/guardar rápidamente QFileDialog
.
from PyQt5.QtWidgets import QFileDialog, QDialog
from definitions import ROOT_DIR
from PyQt5 import QtCore
def FileDialog(directory='', forOpen=True, fmt='', isFolder=False):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
options |= QFileDialog.DontUseCustomDirectoryIcons
dialog = QFileDialog()
dialog.setOptions(options)
dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden)
# ARE WE TALKING ABOUT FILES OR FOLDERS
if isFolder:
dialog.setFileMode(QFileDialog.DirectoryOnly)
else:
dialog.setFileMode(QFileDialog.AnyFile)
# OPENING OR SAVING
dialog.setAcceptMode(QFileDialog.AcceptOpen) if forOpen else dialog.setAcceptMode(QFileDialog.AcceptSave)
# SET FORMAT, IF SPECIFIED
if fmt != '' and isFolder is False:
dialog.setDefaultSuffix(fmt)
dialog.setNameFilters([f'fmt (*.fmt)'])
# SET THE STARTING DIRECTORY
if directory != '':
dialog.setDirectory(str(directory))
else:
dialog.setDirectory(str(ROOT_DIR))
if dialog.exec_() == QDialog.Accepted:
path = dialog.selectedFiles()[0] # returns a list
return path
else:
return ''
Usar getExistingDirectory
método en su lugar:
from PyQt5.QtWidgets import QFileDialog
dialog = QFileDialog()
foo_dir = dialog.getExistingDirectory(self, 'Select an awesome directory')
print(foo_dir)
Si haces scroll puedes encontrar los comentarios de otros gestores de proyectos, tú todavía tienes el poder mostrar el tuyo si lo crees conveniente.