Skip to content

SliceValueTransformationProxyModel

Qt Base Class: QIdentityProxyModel

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

Base classes

Name Children Inherits
SliceIdentityProxyModel
prettyqt.itemmodels.proxies.sliceidentityproxymodel

⋔ Inheritance diagram

graph TD
  1473290753056["itemmodels.SliceValueTransformationProxyModel"]
  1473290716944["itemmodels.SliceIdentityProxyModel"]
  1473299892128["core.IdentityProxyModel"]
  1473299903840["core.AbstractProxyModelMixin"]
  1473299890176["core.AbstractItemModelMixin"]
  1473299815024["core.ObjectMixin"]
  140713234304496["builtins.object"]
  1473289064768["QtCore.QIdentityProxyModel"]
  1473289061840["QtCore.QAbstractProxyModel"]
  1473289050128["QtCore.QAbstractItemModel"]
  1473288842240["QtCore.QObject"]
  1473291690208["Shiboken.Object"]
  1473290716944 --> 1473290753056
  1473299892128 --> 1473290716944
  1473299903840 --> 1473299892128
  1473299890176 --> 1473299903840
  1473299815024 --> 1473299890176
  140713234304496 --> 1473299815024
  1473289064768 --> 1473299892128
  1473289061840 --> 1473289064768
  1473289050128 --> 1473289061840
  1473288842240 --> 1473289050128
  1473291690208 --> 1473288842240
  140713234304496 --> 1473291690208

🛈 DocStrings

Bases: SliceIdentityProxyModel

A proxy model which transforms cell contents based on a Callable.

Example:

model = MyModel()
table = widgets.TableView()
table.set_model(model)
table.proxifier[::2, 2:].modify(xyz)
table.show()

or

indexer = (slice(None, None, 2), slice(2, None))
proxy = itemmodels.SliceValueTransformationProxyModel(indexer=indexer)
proxy.set_source_model(model)
proxy.add_transformer(lambda x: x + "something", selector=lambda x: "abc" in x)
table.set_model(proxy)
table.show()
Source code in prettyqt\itemmodels\proxies\slicevaluetransformationproxymodel.py
class SliceValueTransformationProxyModel(itemmodels.SliceIdentityProxyModel):
    """A proxy model which transforms cell contents based on a Callable.

    ### Example:
    ```py
    model = MyModel()
    table = widgets.TableView()
    table.set_model(model)
    table.proxifier[::2, 2:].modify(xyz)
    table.show()
    ```

    or

    ```py
    indexer = (slice(None, None, 2), slice(2, None))
    proxy = itemmodels.SliceValueTransformationProxyModel(indexer=indexer)
    proxy.set_source_model(model)
    proxy.add_transformer(lambda x: x + "something", selector=lambda x: "abc" in x)
    table.set_model(proxy)
    table.show()
    ```
    """

    ID = "value_transformation"

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._transformers: list[Transformer] = []

    def clear(self):
        """Clear all transformers."""
        self._transformers = []

    def add_transformer(
        self,
        fn: Callable[[Any], Any],
        role: constants.ItemDataRole = constants.DISPLAY_ROLE,
        selector: Callable[[Any], bool] | None = None,
        selector_role: constants.ItemDataRole = constants.DISPLAY_ROLE,
    ):
        """Add a transformer for given role.

        If a selector callable is given, the transformer will only be applied if the
        selector returns True.
        The selector receives the content of given data role as an argument.

        Arguments:
            fn: Callable to transform data of given role
            role: Data role to transform
            selector: Callable to filter the indexes which should be transformed
            selector_role: Role to use for the selector callable
        """
        tr = Transformer(
            fn=fn,
            role=role,
            selector=selector,
            selector_role=selector_role,
        )
        self._transformers.append(tr)

    def data(
        self,
        index: core.ModelIndex,
        role: constants.ItemDataRole = constants.DISPLAY_ROLE,
    ):
        val = super().data(index, role)
        if not self.indexer_contains(index):
            return val
        for t in self._transformers:
            if t.role == role:
                selector_val = super().data(index, t.selector_role)
                if t.selector is None or t.selector(selector_val):
                    val = t.fn(selector_val)
        return val

add_transformer(fn: Callable[[Any], Any], role: constants.ItemDataRole = constants.DISPLAY_ROLE, selector: Callable[[Any], bool] | None = None, selector_role: constants.ItemDataRole = constants.DISPLAY_ROLE)

Add a transformer for given role.

If a selector callable is given, the transformer will only be applied if the selector returns True. The selector receives the content of given data role as an argument.

Parameters:

Name Type Description Default
fn Callable[[Any], Any]

Callable to transform data of given role

required
role ItemDataRole

Data role to transform

DISPLAY_ROLE
selector Callable[[Any], bool] | None

Callable to filter the indexes which should be transformed

None
selector_role ItemDataRole

Role to use for the selector callable

DISPLAY_ROLE
Source code in prettyqt\itemmodels\proxies\slicevaluetransformationproxymodel.py
def add_transformer(
    self,
    fn: Callable[[Any], Any],
    role: constants.ItemDataRole = constants.DISPLAY_ROLE,
    selector: Callable[[Any], bool] | None = None,
    selector_role: constants.ItemDataRole = constants.DISPLAY_ROLE,
):
    """Add a transformer for given role.

    If a selector callable is given, the transformer will only be applied if the
    selector returns True.
    The selector receives the content of given data role as an argument.

    Arguments:
        fn: Callable to transform data of given role
        role: Data role to transform
        selector: Callable to filter the indexes which should be transformed
        selector_role: Role to use for the selector callable
    """
    tr = Transformer(
        fn=fn,
        role=role,
        selector=selector,
        selector_role=selector_role,
    )
    self._transformers.append(tr)

clear()

Clear all transformers.

Source code in prettyqt\itemmodels\proxies\slicevaluetransformationproxymodel.py
def clear(self):
    """Clear all transformers."""
    self._transformers = []

Info

This is a slice proxy and can be selectively applied to a model. Read more about slices.

⌗ Property table

Qt Property Type Doc
objectName QString
sourceModel QAbstractItemModel
column_slice QVariantList Column slice to include for the proxy
row_slice QVariantList Row slice to include for the proxy