Le composant FileDialog de QML renverra une URL du type file:///C:/Users/username/nuxeo
sur Windows et file:///home/username/nuxeo
sur les autres OS.
L'idée est de supprimer le préfixe "file://" et de normaliser le chemin complet sous Windows (avec le bon séparateur de dossiers).
Donc voici le morceau de code à placer dans le fichier QML, le principal se trouve dans la propriété onAccepted
qui appelera to_local_file()
avec l'URL du dossier sélectionné :
FileDialog {
id: fileDialog
folder: shortcuts.home
selectFolder: true
onAccepted: folderInput.text = to_local_file(fileDialog.fileUrl)
}
Et côté Python, la fonction simplissime :
from os.path import abspath
from PyQt5.QtCore import QUrl, pyqtSlot
@pyqtSlot(QUrl, result=str)
def to_local_file(self, url: QUrl) -> str:
"""
Convert the given QUrl to its local path equivalent.
>>> to_local_file("file:///home/username/nuxeo")
/home/username/nuxeo
>>> to_local_file("file:///C:/Users/username/nuxeo")
C:\\Users\\username\\nuxeo
"""
return abspath(url.toLocalFile())
C'est propre et universel. Beau.
Pensez à injecter la function dans le contexte de QML :
QMLContext.setContextProperty("to_local_file", to_local_file)
Source : NXDRIVE-1460: Better handle the path folder selection in account creation.