Skip to content

FileDialog

Qt Base Class: QFileDialog

Signature: QFileDialog(self, parent: PySide6.QtWidgets.QWidget, f: PySide6.QtCore.Qt.WindowType) -> None QFileDialog(self, parent: Optional[PySide6.QtWidgets.QWidget] = None, caption: str = '', directory: str = '', filter: str = '') -> None

Base classes

Name Children Inherits
DialogMixin
prettyqt.widgets.dialog
QFileDialog
PySide6.QtWidgets
QFileDialog(self, parent: PySide6.QtWidgets.QWidget, f: PySide6.QtCore.Qt.WindowType) -> None

⋔ Inheritance diagram

graph TD
  1473296370080["widgets.FileDialog"]
  1473296195376["widgets.DialogMixin"]
  1473293688240["widgets.WidgetMixin"]
  1473299815024["core.ObjectMixin"]
  140713234304496["builtins.object"]
  1473245548480["gui.PaintDeviceMixin"]
  1473293773152["QtWidgets.QFileDialog"]
  1473241356416["QtWidgets.QDialog"]
  1473290849680["QtWidgets.QWidget"]
  1473288842240["QtCore.QObject"]
  1473291690208["Shiboken.Object"]
  1473300082368["QtGui.QPaintDevice"]
  1473296195376 --> 1473296370080
  1473293688240 --> 1473296195376
  1473299815024 --> 1473293688240
  140713234304496 --> 1473299815024
  1473245548480 --> 1473293688240
  140713234304496 --> 1473245548480
  1473293773152 --> 1473296370080
  1473241356416 --> 1473293773152
  1473290849680 --> 1473241356416
  1473288842240 --> 1473290849680
  1473291690208 --> 1473288842240
  140713234304496 --> 1473291690208
  1473300082368 --> 1473290849680
  1473291690208 --> 1473300082368

🛈 DocStrings

Bases: DialogMixin, QFileDialog

Dialog that allow users to select files or directories.

Source code in prettyqt\widgets\filedialog.py
class FileDialog(widgets.DialogMixin, widgets.QFileDialog):
    """Dialog that allow users to select files or directories."""

    def __init__(
        self,
        path: None | datatypes.PathType = None,
        mode: AcceptModeStr = "open",
        caption: str | None = None,
        path_id: str | None = None,
        extension_filter: dict | None = None,
        file_mode: FileModeStr = "existing_files",
        **kwargs,
    ):
        super().__init__(**kwargs)
        self.set_title(caption)
        self.path_id = path_id
        if extension_filter:
            self.set_extension_filter(extension_filter)
        if path_id is not None and path is None:
            settings = core.Settings()
            path = settings.get(path_id, "")
        if path is not None:
            self.set_directory(path)
        self.set_file_mode(file_mode)
        self.set_accept_mode(mode)

    def _get_map(self):
        maps = super()._get_map()
        maps |= {
            "acceptMode": ACCEPT_MODE,
            "fileMode": FILE_MODE,
            "viewMode": VIEW_MODE,
        }
        return maps

    def set_accept_mode(self, mode: AcceptModeStr | widgets.QFileDialog.AcceptMode):
        """Set accept mode.

        Args:
            mode: accept mode to use
        """
        self.setAcceptMode(ACCEPT_MODE.get_enum_value(mode))

    def get_accept_mode(self) -> AcceptModeStr:
        """Return accept mode.

        Returns:
            accept mode
        """
        return ACCEPT_MODE.inverse[self.acceptMode()]

    def set_view_mode(self, mode: ViewModeStr | widgets.QFileDialog.ViewMode):
        """Set view mode.

        Args:
            mode: view mode to use
        """
        self.setViewMode(VIEW_MODE.get_enum_value(mode))

    def get_view_mode(self) -> ViewModeStr:
        """Return view mode.

        Returns:
            view mode
        """
        return VIEW_MODE.inverse[self.viewMode()]

    def set_label_text(
        self, label: LabelStr | widgets.QFileDialog.DialogLabel, text: str
    ):
        """Set the label text for button label.

        Args:
            label: button to set text for
            text: text to use
        """
        self.setLabelText(LABEL.get_enum_value(label), text)

    def get_label_text(self, label: LabelStr | widgets.QFileDialog.DialogLabel) -> str:
        """Return label text.

        Returns:
            label text
        """
        return self.labelText(LABEL.get_enum_value(label))

    def get_file_mode(self) -> FileModeStr:
        """Return file mode.

        Returns:
            file mode
        """
        return FILE_MODE.inverse[self.fileMode()]

    def set_file_mode(self, mode: FileModeStr | widgets.QFileDialog.FileMode):
        """Set the file mode of the dialog.

        Args:
            mode: mode to use
        """
        self.setFileMode(FILE_MODE.get_enum_value(mode))

    def selected_files(self) -> list[pathlib.Path]:
        return [pathlib.Path(p) for p in self.selectedFiles()]

    def selected_file(self) -> pathlib.Path | None:
        selected = self.selectedFiles()
        return pathlib.Path(selected[0]) if selected else None

    def choose_folder(self) -> list[pathlib.Path] | None:
        self.set_file_mode("directory")
        return self.choose()

    def open_file(self) -> list[pathlib.Path] | None:
        self.set_file_mode("existing_file")
        return self.choose()

    def choose(self) -> list[pathlib.Path] | None:
        result = self.exec()
        if result != self.DialogCode.Accepted:
            return None
        paths = self.selected_files()
        if self.path_id:
            settings = core.Settings()
            folder_path = paths[0].parent
            settings.setValue(self.path_id, str(folder_path))
        return paths

    def set_extension_filter(self, extension_dict: dict[str, list[str]]):
        """Set filter based on given dictionary.

        dict must contain "'name': ['.ext1', '.ext2']" as key-value pairs

        Args:
            extension_dict: filter dictionary
        """
        items = [
            f"{k} ({' '.join(f'*{ext}' for ext in v)})" for k, v in extension_dict.items()
        ]
        filter_str = ";;".join(items)
        self.setNameFilter(filter_str)

    def get_directory(self) -> pathlib.Path:
        """Return current directory.

        returns current directory level as a Pathlib object

        Returns:
            Pathlib object
        """
        return pathlib.Path(self.directory().absolutePath())

    def set_directory(self, path: datatypes.PathType):
        """Set start directory."""
        path = os.fspath(path)
        self.setDirectory(path)

    def set_filter(self, *filters: core.dir.FilterStr):
        flags = core.dir.FILTERS.merge_flags(filters)
        self.setFilter(flags)

    def get_filter(self) -> list[core.dir.FilterStr]:
        return core.dir.FILTERS.get_list(self.filter())

get_accept_mode() -> AcceptModeStr

Return accept mode.

Source code in prettyqt\widgets\filedialog.py
def get_accept_mode(self) -> AcceptModeStr:
    """Return accept mode.

    Returns:
        accept mode
    """
    return ACCEPT_MODE.inverse[self.acceptMode()]

get_directory() -> pathlib.Path

Return current directory.

returns current directory level as a Pathlib object

Source code in prettyqt\widgets\filedialog.py
def get_directory(self) -> pathlib.Path:
    """Return current directory.

    returns current directory level as a Pathlib object

    Returns:
        Pathlib object
    """
    return pathlib.Path(self.directory().absolutePath())

get_file_mode() -> FileModeStr

Return file mode.

Source code in prettyqt\widgets\filedialog.py
def get_file_mode(self) -> FileModeStr:
    """Return file mode.

    Returns:
        file mode
    """
    return FILE_MODE.inverse[self.fileMode()]

get_label_text(label: LabelStr | widgets.QFileDialog.DialogLabel) -> str

Return label text.

Source code in prettyqt\widgets\filedialog.py
def get_label_text(self, label: LabelStr | widgets.QFileDialog.DialogLabel) -> str:
    """Return label text.

    Returns:
        label text
    """
    return self.labelText(LABEL.get_enum_value(label))

get_view_mode() -> ViewModeStr

Return view mode.

Source code in prettyqt\widgets\filedialog.py
def get_view_mode(self) -> ViewModeStr:
    """Return view mode.

    Returns:
        view mode
    """
    return VIEW_MODE.inverse[self.viewMode()]

set_accept_mode(mode: AcceptModeStr | widgets.QFileDialog.AcceptMode)

Set accept mode.

Parameters:

Name Type Description Default
mode AcceptModeStr | AcceptMode

accept mode to use

required
Source code in prettyqt\widgets\filedialog.py
def set_accept_mode(self, mode: AcceptModeStr | widgets.QFileDialog.AcceptMode):
    """Set accept mode.

    Args:
        mode: accept mode to use
    """
    self.setAcceptMode(ACCEPT_MODE.get_enum_value(mode))

set_directory(path: datatypes.PathType)

Set start directory.

Source code in prettyqt\widgets\filedialog.py
def set_directory(self, path: datatypes.PathType):
    """Set start directory."""
    path = os.fspath(path)
    self.setDirectory(path)

set_extension_filter(extension_dict: dict[str, list[str]])

Set filter based on given dictionary.

dict must contain "'name': ['.ext1', '.ext2']" as key-value pairs

Parameters:

Name Type Description Default
extension_dict dict[str, list[str]]

filter dictionary

required
Source code in prettyqt\widgets\filedialog.py
def set_extension_filter(self, extension_dict: dict[str, list[str]]):
    """Set filter based on given dictionary.

    dict must contain "'name': ['.ext1', '.ext2']" as key-value pairs

    Args:
        extension_dict: filter dictionary
    """
    items = [
        f"{k} ({' '.join(f'*{ext}' for ext in v)})" for k, v in extension_dict.items()
    ]
    filter_str = ";;".join(items)
    self.setNameFilter(filter_str)

set_file_mode(mode: FileModeStr | widgets.QFileDialog.FileMode)

Set the file mode of the dialog.

Parameters:

Name Type Description Default
mode FileModeStr | FileMode

mode to use

required
Source code in prettyqt\widgets\filedialog.py
def set_file_mode(self, mode: FileModeStr | widgets.QFileDialog.FileMode):
    """Set the file mode of the dialog.

    Args:
        mode: mode to use
    """
    self.setFileMode(FILE_MODE.get_enum_value(mode))

set_label_text(label: LabelStr | widgets.QFileDialog.DialogLabel, text: str)

Set the label text for button label.

Parameters:

Name Type Description Default
label LabelStr | DialogLabel

button to set text for

required
text str

text to use

required
Source code in prettyqt\widgets\filedialog.py
def set_label_text(
    self, label: LabelStr | widgets.QFileDialog.DialogLabel, text: str
):
    """Set the label text for button label.

    Args:
        label: button to set text for
        text: text to use
    """
    self.setLabelText(LABEL.get_enum_value(label), text)

set_view_mode(mode: ViewModeStr | widgets.QFileDialog.ViewMode)

Set view mode.

Parameters:

Name Type Description Default
mode ViewModeStr | ViewMode

view mode to use

required
Source code in prettyqt\widgets\filedialog.py
def set_view_mode(self, mode: ViewModeStr | widgets.QFileDialog.ViewMode):
    """Set view mode.

    Args:
        mode: view mode to use
    """
    self.setViewMode(VIEW_MODE.get_enum_value(mode))

⌗ Property table

Qt Property Type Doc
objectName QString
modal bool
windowModality Qt::WindowModality
enabled bool
geometry QRect
frameGeometry QRect
normalGeometry QRect
x int
y int
pos QPoint
frameSize QSize
size QSize
width int
height int
rect QRect
childrenRect QRect
childrenRegion QRegion
sizePolicy QSizePolicy
minimumSize QSize
maximumSize QSize
minimumWidth int
minimumHeight int
maximumWidth int
maximumHeight int
sizeIncrement QSize
baseSize QSize
palette QPalette
font QFont
cursor QCursor
mouseTracking bool
tabletTracking bool
isActiveWindow bool
focusPolicy Qt::FocusPolicy
focus bool
contextMenuPolicy Qt::ContextMenuPolicy
updatesEnabled bool
visible bool
minimized bool
maximized bool
fullScreen bool
sizeHint QSize
minimumSizeHint QSize
acceptDrops bool
windowTitle QString
windowIcon QIcon
windowIconText QString
windowOpacity double
windowModified bool
toolTip QString
toolTipDuration int
statusTip QString
whatsThis QString
accessibleName QString
accessibleDescription QString
layoutDirection Qt::LayoutDirection
autoFillBackground bool
styleSheet QString
locale QLocale
windowFilePath QString
inputMethodHints QFlags
sizeGripEnabled bool
modal bool
viewMode QFileDialog::ViewMode
fileMode QFileDialog::FileMode
acceptMode QFileDialog::AcceptMode
defaultSuffix QString
options QFlags
supportedSchemes QStringList