Created
March 29, 2024 20:31
-
-
Save sneakers-the-rat/22c3449e2c7043c594712bce89c27e8e to your computer and use it in GitHub Desktop.
Select multiple directories with PySide6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from pathlib import Path | |
from typing import Optional, List | |
from PySide6.QtWidgets import ( | |
QApplication, | |
QFileDialog, | |
QListView, | |
QAbstractItemView, | |
QTreeView, | |
QFileSystemModel | |
) | |
def choose_directories(base:Path = Path('.')) -> Optional[List[str]]: | |
""" | |
Open a dialogue to select multiple directories | |
Args: | |
base (Path): Starting directory to show when opening dialogue | |
Returns: | |
List[str]: List of paths that were selected, ``None`` if "cancel" selected" | |
References: | |
Mildly adapted from https://stackoverflow.com/a/28548773 | |
to use outside an exising Qt Application | |
""" | |
app = QApplication() | |
file_dialog = QFileDialog() | |
file_dialog.setOption(QFileDialog.Option.DontUseNativeDialog, True) | |
file_dialog.setFileMode(QFileDialog.Directory) | |
for widget_type in (QListView, QTreeView): | |
for view in file_dialog.findChildren(widget_type): | |
if isinstance(view.model(), QFileSystemModel): | |
view.setSelectionMode( | |
QAbstractItemView.ExtendedSelection) | |
if file_dialog.exec(): | |
paths = file_dialog.selectedFiles() | |
return paths | |
if __name__ == "__main__": | |
paths = choose_directories() | |
print(paths) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment