Skip to content

SortModel[T]

from slint import SortModel
python

SortModel is a Model that provides the rows of a source model in sorted order.

Like sorted(), it orders the rows by the result of the key function, or by the rows themselves without a key, and in descending order with reverse=True. To sort by a comparison function, pass key=functools.cmp_to_key(compare). Rows with a float NaN key sort last, followed by rows whose key raises an exception, regardless of reverse. Keys that can’t be ordered, such as tuples that contain NaN, raise ValueError.

The SortModel follows the changes of the source model. Setting a row sets the corresponding row of the source model.

names = slint.ListModel(["Max", "Hans", "Roman"])
sorted_names = slint.SortModel(names)
assert list(sorted_names) == ["Hans", "Max", "Roman"]
by_length = slint.SortModel(names, key=len, reverse=True)
python

Alternatively, subclass SortModel and implement sort_key. Call reset when the order changes for reasons other than a change of the source model.

Bases: _WritableAdapterModel[T]

source_model
sort_key(row_data: T) -> Any

Returns the value to order row_data, a row of the source model, by. The default implementation returns row_data itself. Re-implement this method in a sub-class that doesn’t pass a key to the constructor.

reset() -> None

Sorts all rows of the source model again. Call this when the order changes for reasons other than a change of the source model.

unsorted_row(row: int) -> int

Returns the index of the row of the source model that is row in this model. Raises IndexError if row is out of range.

notify_row_changed(row: int) -> None

Call this method from a sub-class to notify the views that a row has changed.

notify_row_removed(row: int, count: int) -> None

Call this method from a sub-class to notify the views that count rows have been removed starting at row.

notify_row_added(row: int, count: int) -> None

Call this method from a sub-class to notify the views that count rows have been added starting at row.

set_row_data(row: int, value: T) -> None

Sets the row of the source model that corresponds to row. Raises IndexError if row is out of range.

row_count() -> int
row_data(row: int) -> T | None
push_row(value: T) -> None

Add a new row to the model with the provided value. The default implementation calls insert_row with the row count.

remove_row(row: int) -> None

Remove the row at the given index. Raises an exception when the model rejects the modification. The default implementation raises NotImplementedError. A model that supports removing rows should also call notify_row_removed.

insert_row(row: int, value: T) -> None

Insert a new row at the given index. Raises an exception when the model rejects the modification. The default implementation raises NotImplementedError. A model that supports inserting rows should also call notify_row_added.


© 2026 SixtyFPS GmbH