Skip to main content

Slint Python integration

Project description

Slint-python (Beta)

Slint is a UI toolkit that supports different programming languages. Slint-python is the integration with Python.

Warning Slint-python is in a beta phase of development: The APIs while mostly stable, may be subject to further changes. Any changes will be documented in the ChangeLog.

You can track the progress for the Python integration by looking at python-labelled issues at https://github.com/slint-ui/slint/labels/a%3Alanguage-python .

Slint Language Manual

The Slint Language Documentation covers the Slint UI description language in detail.

Prerequisites

Installation

Slint can be installed with uv or pip from the Python Package Index:

uv add slint

The installation uses binaries provided for macOS, Windows, and Linux for various architectures. If your target platform is not covered by binaries, uv will automatically build Slint from source. If that happens, you will then need some software development tools on your machine, as well as Rust.

Quick Start

  1. Create a new project with uv init.
  2. Add the Slint Python package to your Python project: uv add slint
  3. Create a file called app-window.slint:
import { Button, VerticalBox } from "std-widgets.slint";

export component AppWindow inherits Window {
    in-out property<int> counter: 42;
    callback request-increase-value();
    VerticalBox {
        Text {
            text: "Counter: \{root.counter}";
        }
        Button {
            text: "Increase value";
            clicked => {
                root.request-increase-value();
            }
        }
    }
}
  1. Create a file called main.py:
import slint

# slint.loader will look in `sys.path` for `app-window.slint`.
class App(slint.loader.app_window.AppWindow):
    @slint.callback
    def request_increase_value(self):
        self.counter = self.counter + 1

app = App()
app.run()
  1. Run it with uv run main.py

API Overview

Instantiating a Component

The following example shows how to instantiate a Slint component in Python:

app.slint

export component MainWindow inherits Window {
    callback clicked <=> i-touch-area.clicked;

    in property <int> counter;

    width: 400px;
    height: 200px;

    i-touch-area := TouchArea {}
}

The exported component is exposed as a Python class. To access this class, you have two options:

  1. Call slint.load_file("app.slint"). The returned object is a namespace, that provides the MainWindow class as well as any other explicitly exported component that inherits Window:

    import slint
    components = slint.load_file("app.slint")
    main_window = components.MainWindow()
    
  2. Use Slint's auto-loader, which lazily loads .slint files from sys.path:

    import slint
    # Look for for `app.slint` in `sys.path`:
    main_window = slint.loader.app.MainWindow()
    

    Any attribute lookup in slint.loader is searched for in sys.path. If a directory with the name exists, it is returned as a loader object, and subsequent attribute lookups follow the same logic.

    If the name matches a file with the .slint extension, it is automatically loaded with load_file and the namespace is returned.

    If the file name contains a dash, like app-window.slint, an attribute lookup for app_window tries to locate app_window.slint and then fall back to app-window.slint.

Accessing Properties

Properties declared as out or in-out in .slint files are visible as properties on the component instance.

main_window.counter = 42
print(main_window.counter)

Accessing Globals

Global Singletons are accessible in Python as properties in the component instance.

For example, this Slint code declares a PrinterJobQueue singleton:

export global PrinterJobQueue {
    in-out property <int> job-count;
}

Access it as a property on the component instance by its name:

print("job count:", instance.PrinterJobQueue.job_count)

Note: Global singletons are instantiated once per component. When declaring multiple components for export to Python, each instance has their own associated globals singletons.

Setting and Invoking Callbacks

Callbacks declared in .slint files are visible as callable properties on the component instance. Invoke them as functions to invoke the callback, and assign Python callables to set the callback handler.

In Slint, callbacks are defined using the callback keyword and can be connected to another component's callback using the <=> syntax.

my-component.slint

export component MyComponent inherits Window {
    callback clicked <=> i-touch-area.clicked;

    width: 400px;
    height: 200px;

    i-touch-area := TouchArea {}
}

The callbacks in Slint are exposed as properties and that can be called as functions.

main.py

import slint

component = slint.loader.my_component.MyComponent()
# connect to a callback

def clicked():
    print("hello")

component.clicked = clicked
// invoke a callback
component.clicked();

Another way to set callbacks is to sub-class and use the @slint.callback decorator:

import slint

class Component(slint.loader.my_component.MyComponent):
    @slint.callback
    def clicked(self):
        print("hello")

component = Component()

The @slint.callback() decorator accepts a name argument, if the name of the method does not match the name of the callback in the .slint file. Similarly, a global_name argument can be used to bind a method to a callback in a global singleton.

Type Mappings

Each type used for properties in the Slint Language translates to a specific type in Python. The following table summarizes the mapping:

.slint Type Python Type Notes
int int
float float
string str
color slint.Color
brush slint.Brush
image slint.Image
length float
physical_length float
duration float The number of milliseconds
angle float The angle in degrees
structure dict/Struct When reading, structures are mapped to data classes, when writing dicts are also accepted.
array slint.Model

Arrays and Models

You can set array properties from Python by passing subclasses of slint.Model.

Use the slint.ListModel class to construct a model from an iterable:

component.model = slint.ListModel([1, 2, 3]);
component.model.append(4)
del component.model[0]

When sub-classing slint.Model, provide the following methods:

    def row_count(self):
        """Return the number of rows in your model"""

    def row_data(self, row):
        """Return data at specified row"""

    def set_row_data(self, row, data):
        """For read-write models, store data in the given row. When done call set.notify_row_changed:"
        ..."""
        self.notify_row_changed(row)

When adding or inserting rows, call notify_row_added(row, count) on the super class. Similarly, when removing rows, notify Slint by calling notify_row_removed(row, count).

Structs

Structs declared in Slint and exposed to Python via export are then accessible in the namespace that is returned when instantiating a component.

app.slint

export struct MyData {
    name: string,
    age: int
}

export component MainWindow inherits Window {
    in-out property <MyData> data;
}

main.py

The exported MyData struct can be constructed as follows:

import slint
# Look for for `app.slint` in `sys.path`:
main_window = slint.loader.app.MainWindow()

data = slint.loader.app.MyData(name = "Simon")
data.age = 10
main_window.data = data

Third-Party Licenses

For a list of the third-party licenses of all dependencies, see the separate Third-Party Licenses page.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

slint-1.12.0a4.tar.gz (1.9 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

slint-1.12.0a4-cp310-abi3-win_amd64.whl (12.2 MB view details)

Uploaded CPython 3.10+Windows x86-64

slint-1.12.0a4-cp310-abi3-manylinux_2_35_x86_64.whl (16.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.35+ x86-64

slint-1.12.0a4-cp310-abi3-manylinux_2_31_armv7l.whl (15.9 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.31+ ARMv7l

slint-1.12.0a4-cp310-abi3-manylinux_2_31_aarch64.whl (16.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.31+ ARM64

slint-1.12.0a4-cp310-abi3-macosx_11_0_x86_64.whl (12.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ x86-64

slint-1.12.0a4-cp310-abi3-macosx_11_0_arm64.whl (11.7 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

slint-1.12.0a4-cp310-abi3-ios_13_0_arm64_iphonesimulator.whl (9.0 MB view details)

Uploaded CPython 3.10+iOS 13.0+ ARM64 Simulator

slint-1.12.0a4-cp310-abi3-ios_13_0_arm64_iphoneos.whl (8.8 MB view details)

Uploaded CPython 3.10+iOS 13.0+ ARM64 Device

File details

Details for the file slint-1.12.0a4.tar.gz.

File metadata

  • Download URL: slint-1.12.0a4.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for slint-1.12.0a4.tar.gz
Algorithm Hash digest
SHA256 f6eb02206cd1c67f060150155f3832fadbcc37a3445d86cc5b925c7dc0280493
MD5 4fe0635b27783697ffb58c74065a9c42
BLAKE2b-256 48b746d813bdca39167a20a9ae5eb25962cb8190628c10a4c5e016b399933309

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4.tar.gz:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slint-1.12.0a4-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: slint-1.12.0a4-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 12.2 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for slint-1.12.0a4-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c9e1b3f86a458075508ac2ef569583cdb1871e949e266929bf31bae7b8ad1c99
MD5 440c0b9c4ae323df41db9aacda7926ea
BLAKE2b-256 e72e8b63c2e3e4649e38eb72531bdf77ce6c98e14210a6f584f12cb2306d5c03

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4-cp310-abi3-win_amd64.whl:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slint-1.12.0a4-cp310-abi3-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for slint-1.12.0a4-cp310-abi3-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 d4b815feb9169e9acc189e2d38ec27f2afa1ebae9808e0f8c2648380235bb086
MD5 ac2c21da548bacd40c752a4cf06a993a
BLAKE2b-256 2e03cd766d135f037a7a43776cde2813b8a4679200154864cfff0e69bf8d7774

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4-cp310-abi3-manylinux_2_35_x86_64.whl:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slint-1.12.0a4-cp310-abi3-manylinux_2_31_armv7l.whl.

File metadata

File hashes

Hashes for slint-1.12.0a4-cp310-abi3-manylinux_2_31_armv7l.whl
Algorithm Hash digest
SHA256 fdeb02692d78581ba33864bc592fe3e1e71e11e885c480c6d2c3808476ed1659
MD5 d3af86febb19a6a53b2b92a9290368f2
BLAKE2b-256 9d0f6f0edef1e9bfe0b71c1e14f12f50c3ad139a8599eb3af18313b1a5e13d1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4-cp310-abi3-manylinux_2_31_armv7l.whl:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slint-1.12.0a4-cp310-abi3-manylinux_2_31_aarch64.whl.

File metadata

File hashes

Hashes for slint-1.12.0a4-cp310-abi3-manylinux_2_31_aarch64.whl
Algorithm Hash digest
SHA256 53b61a5bcd330c1dbca17b91bc5b2bdf215d39274a8c2345ccf551f4056ef326
MD5 859a2f3751b637ed22b91e492e15eb01
BLAKE2b-256 84533f7230f5d939b6415601930661dcb0d67269bb9570300b9fd3a9654cc9a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4-cp310-abi3-manylinux_2_31_aarch64.whl:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slint-1.12.0a4-cp310-abi3-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for slint-1.12.0a4-cp310-abi3-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 e60b985c75be6853da82a8696798a7c0fa775fb87cac69c3d07c2d689b99e028
MD5 2f68a02ac165e54ce8fb440f1b58a5f8
BLAKE2b-256 57b0ed36fcd73708e65876376c73c04a0574f03095ec72dca4c857398756986e

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4-cp310-abi3-macosx_11_0_x86_64.whl:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slint-1.12.0a4-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for slint-1.12.0a4-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 38da2a33807265ab9f3b1034c5c74cc3655ff02daec7ab991de9729749513191
MD5 061751680abf74f4466761eeba8b79ef
BLAKE2b-256 fdaf4a8cb530e29573a3a188e45f2f05503d37117acc8dddf7f0dba6d6051d88

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slint-1.12.0a4-cp310-abi3-ios_13_0_arm64_iphonesimulator.whl.

File metadata

File hashes

Hashes for slint-1.12.0a4-cp310-abi3-ios_13_0_arm64_iphonesimulator.whl
Algorithm Hash digest
SHA256 7727bc03459f778f5fde65951f3a4fc51a73ee1a1d4822429ff71421cb8ce602
MD5 de0ddc922738ffc5f35a499104666324
BLAKE2b-256 ad50482318fdb97028e5117d66b75ce106b156762754e61a1cca590fef751357

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4-cp310-abi3-ios_13_0_arm64_iphonesimulator.whl:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file slint-1.12.0a4-cp310-abi3-ios_13_0_arm64_iphoneos.whl.

File metadata

File hashes

Hashes for slint-1.12.0a4-cp310-abi3-ios_13_0_arm64_iphoneos.whl
Algorithm Hash digest
SHA256 dbb370fcbefb62c82577552e84c10986d0fc94a17ad4620d650a47474af27e73
MD5 5d5d780f4a14235c9bdb4b39ca684177
BLAKE2b-256 a0eedcb855826e3519640419b33bcd2aab3a1a57973d4978940d5b26f369b78b

See more details on using hashes here.

Provenance

The following attestation bundles were made for slint-1.12.0a4-cp310-abi3-ios_13_0_arm64_iphoneos.whl:

Publisher: upload_pypi.yaml on slint-ui/slint

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page