Я пытаюсь использовать QFileDialog
, чтобы получить список путей выбранных папок И каталогов.
Я знаю, как сделать одну или другую, используя QFileDialog.getOpenFileNames
и QFileDialog.getExistingDirectory
, но не оба одновременно.
Документы на C ++ и другие вопросы в других местах, похоже, не помогли мне, независимо от того, сколько я гуглил.
Я использую PyQt5 5.14.2
и Python 3.8.2
on Windows.
Редактировать: мне удалось придумать следующее решение, не используя родной диалог Windows, и оно работает, но кажется «хакерским». Кто-нибудь может придумать лучшее решение?
from PyQt5 import QtWidgets
main_window = QtWidgets.QApplication([])
dlg = QtWidgets.QFileDialog()
dlg.setFileMode(QtWidgets.QFileDialog.Directory)
dlg.setOption(QtWidgets.QFileDialog.DontUseNativeDialog, True)
_list = dlg.findChild(QtWidgets.QListView, 'listView')
if _list:
_list.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
tree = dlg.findChild(QtWidgets.QTreeView, 'treeView')
if tree:
tree.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
selected = None
if dlg.exec():
selected = dlg.selectedFiles()
print(selected)