Мне нужно диалоговое окно с возможностью выбора нескольких папок, расположенных на разных уровнях. Я нашел это решение, но оно возвращает выбранное только на одном уровне:
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QFileDialog, QWidget, QPushButton, QVBoxLayout, QDialog, QApplication, QAbstractItemView
class FileDialog(QFileDialog):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setFileMode(QFileDialog.DirectoryOnly)
self.setOption(QFileDialog.DontUseNativeDialog, True)
self.findChild(QtWidgets.QListView).setSelectionMode(QAbstractItemView.MultiSelection)
self.findChild(QtWidgets.QTreeView).setSelectionMode(QAbstractItemView.MultiSelection)
def accept(self):
super(FileDialog, self).accept()
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.button = QPushButton('Test', self)
self.button.clicked.connect(self.handleButton)
layout = QVBoxLayout(self)
layout.addWidget(self.button)
def handleButton(self):
dialog = FileDialog(self, 'Directories select dialog', '.')
if dialog.exec_() == QDialog.Accepted:
print(dialog.selectedFiles())
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())