Skip to content

PredicateFilterProxyModel

Qt Base Class: QSortFilterProxyModel

Signature: QSortFilterProxyModel(self, parent: Optional[PySide6.QtCore.QObject] = None) -> None

Base classes

⋔ Inheritance diagram

🛈 DocStrings

Bases: SortFilterProxyModel

A simple filter proxy model with settable filter predicates.

Example:

proxy = PredicateFilterProxyModel()
proxy.add_filter(lambda value: value < 1)
Source code in prettyqt\itemmodels\proxies\predicatefilterproxymodel.py
class PredicateFilterProxyModel(core.SortFilterProxyModel):
    """A simple filter proxy model with settable filter predicates.

    ### Example:
    ```py
    proxy = PredicateFilterProxyModel()
    proxy.add_filter(lambda value: value < 1)
    ```
    """

    ID = "predicate_filter"

    def __init__(self, parent=None, **kwargs):
        super().__init__(parent, **kwargs)
        self._filters: list[Callable[[Any], bool]] = []

    def clear_filters(self):
        self._filters = []
        self.invalidateFilter()

    def add_filter(self, predicate: Callable[[Any], bool]):
        self._filters.append(predicate)
        self.invalidateFilter()

    def filterAcceptsRow(self, row, parent):
        source = self.sourceModel()
        col = self.filterKeyColumn()
        role = self.filterRole()
        index = source.index(row, col, parent)
        data = source.data(index, role)

        def apply(f: Callable):
            try:
                return f(data)
            except (TypeError, ValueError):
                return False

        return all(apply(f) for f in self._filters)

⌗ Property table

Qt Property Type Doc
objectName QString
sourceModel QAbstractItemModel
filterRegularExpression QRegularExpression
filterKeyColumn int
dynamicSortFilter bool
filterCaseSensitivity Qt::CaseSensitivity
sortCaseSensitivity Qt::CaseSensitivity
isSortLocaleAware bool
sortRole int
filterRole int
recursiveFilteringEnabled bool
autoAcceptChildRows bool
filterMode QString Mode to use for filtering