Zalgorithm

Textual TUI workers

Notes on the Textual Worker API.

Docs: https://textual.textualize.io/guide/workers

Related to notes / Textual events and messages

Workers are tasks by default. If the worker’s thread parameter is set to True, the worker will be a thread instead of a task.

Worker events #

When a worker changes state, it sends a Worker.StateChanged event to the widget where the worker was created.

For example (messy):

    @on(Worker.StateChanged)
    def worker_state_change_handler(self, event: Worker.StateChanged) -> None:
        # TODO: handle WorkerState.ERROR and WorkerState.CANCELLED
        worker_name = event.worker.name
        state = event.state
        if worker_name == "launch_processing":
            if state == WorkerState.RUNNING:
                self.query_one("#launch-processing", Button).disabled = True
                self.query_one(FilteredDirectoryTree).disabled = True
            if state == WorkerState.SUCCESS:
                self.query_one("#launch-processing", Button).disabled = False
                self.query_one("#stop-processing").disabled = True
                self.query_one(FilteredDirectoryTree).disabled = False

Note that WorkerState is an enum, with the following values: RUNNING, CANCELLED, ERROR, SUCCESS.

Tags: