Saltar al contenido

PyQt – QFileDialog – ¿busca directamente una carpeta?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *