# Barra de estado

> La barra inferior: diagnósticos, posición del cursor, lenguaje. Componente de Pyzed para GUIs de escritorio en Python, con ejemplos y API.

Source: https://albakore.github.io/pyzed/es/library/status-bar/

:::tip[En pocas palabras]
La barra fina de abajo de la ventana con datos pequeños: errores, número de línea, lenguaje.
:::

La barra inferior con elementos al principio (`start`) y al final (`end`). `ui.status_item` muestra un icono y/o texto, se puede pulsar, marcar como `selected` (un dock abierto) y llevar un `tooltip` con `keys`.

`ui.status_bar` · Categoría: [Espacio de trabajo](https://albakore.github.io/pyzed/es/library/#espacio-de-trabajo) · [Referencia completa →](https://albakore.github.io/pyzed/es/reference/ui/#status_bar)

**Código:**

```python
ui.status_bar(
    [ui.status_item(icon="panel-left", on_press=on_toggle, selected=True, tooltip="Project panel", keys="ctrl-b"),
     ui.status_item("0", icon="circle-x"), ui.status_item("2", icon="triangle-alert", icon_color="warning")],
    [ui.status_item("Ln 12, Col 8"), ui.status_item("UTF-8"), ui.status_item("Python", icon="file-code")],
)
```

## Cuándo usarlo

- Para el estado siempre visible: errores y avisos, posición del cursor, lenguaje, rama de git.

## Uso

```python
from pyzed import ui

ui.status_bar(
    [ui.status_item(icon="panel-left", on_press=on_toggle, selected=True, tooltip="Project panel", keys="ctrl-b"),
     ui.status_item("0", icon="circle-x"), ui.status_item("2", icon="triangle-alert", icon_color="warning")],
    [ui.status_item("Ln 12, Col 8"), ui.status_item("UTF-8"), ui.status_item("Python", icon="file-code")],
)
```

## Variantes

:::note[Sobre estas capturas]
Cada captura la graba pyzed mismo, fuera de pantalla a 2x, en One Dark o One Light según el tema de este sitio, y recortada al componente para que se vea a su tamaño real. El puntero pasa por encima, pulsa o escribe en él; un componente que no reacciona al puntero recorre algunos temas. Con movimiento reducido ves el primer fotograma. Abre **Código** bajo una captura para ver el fragmento que la dibuja; los nombres libres como `on_save` son tus propios callbacks.
:::

### Elementos

```python
ui.status_item("Ln 12, Col 8")
```

```python
ui.status_item("Python", icon="file-code")
```

```python
ui.status_item("2", icon="triangle-alert", icon_color="warning")
```

```python
ui.status_item(icon="panel-left", on_press=on_toggle, selected=True)
```

```python
ui.status_item("main", icon="git-branch", color="accent")
```

### Barra

```python
pz.container(ui.status_bar([ui.status_item("0", icon="circle-x")],
                           [ui.status_item("UTF-8"), ui.status_item("Python")]), width=420)
```

## Eventos

Barra de estado tiene **1 evento propios**, en la tabla de abajo. Como todo widget, también tiene los **18 eventos comunes** (`click`, `double_click`, `right_click`, `mouse_enter`, `drag`, `key_down`, `resize`…), que se conectan con `.on(...)`: mira [Eventos](https://albakore.github.io/pyzed/es/guides/events/) y [Eventos de cada componente](https://albakore.github.io/pyzed/es/library/events/).

| Evento | El handler recibe | Cuándo |
| --- | --- | --- |
| `on_press` | `()` | Mensaje o callable que se envía al pulsar. `None` deshabilita el control. |

**El handler recibe** es lo que Pyzed le pasa a tu función: `()` es nada. Cualquier handler también puede ser un mensaje (un valor que no se puede llamar), que va a `update()`.

### Manejar los eventos

Los mismos eventos escritos de tres formas. **Imperativa**: métodos de la app que cambian `self`. **Declarativa**: los handlers producen mensajes y un único `update()` decide. **Funcional**: una función pura dibuja un estado inmutable y pide cambios con `set_state(...)`. Mira [Imperativo, declarativo y funcional](https://albakore.github.io/pyzed/es/guides/code-styles/).

**Imperativo:**

```python
class Ide(pz.App):
    def __init__(self):
        self.show_left = True

    def view(self):
        return ui.status_bar(
            [ui.status_item(icon="panel-left", selected=self.show_left, tooltip="Project panel",
                            on_press=lambda: setattr(self, "show_left", not self.show_left))],
            [ui.status_item("Python", icon="file-code")],
        )
```

**Declarativo:**

```python
class Ide(pz.App):
    show_left = True

    def update(self, message):
        if message == "toggle left":
            self.show_left = not self.show_left

    def view(self):
        return ui.status_bar([ui.status_item(icon="panel-left", on_press="toggle left",
                                             selected=self.show_left)])
```

**Funcional:**

```python
from dataclasses import dataclass

@dataclass(frozen=True)
class State:
    show_left: bool = True

def view(state, set_state):
    return ui.status_bar([ui.status_item(icon="panel-left", selected=state.show_left,
                                         on_press=lambda: set_state(show_left=not state.show_left))])
```

## Propiedades y API

### `ui.status_bar`

```python
status_bar(start=(), end=(), *, height=28, theme=None)
```

La barra de estado inferior.

| Propiedad | Por defecto | Descripción |
| --- | --- | --- |
| `start` | `()` | Widgets al inicio (izquierda). |
| `end` | `()` | Widgets al final (derecha). |
| `height` | `28` | Alto. |
| `theme` | `None` | Tema a usar en lugar del actual (`pyzed.theme.current()`). |

[Referencia completa →](https://albakore.github.io/pyzed/es/reference/ui/#status_bar)

### `ui.status_item`

```python
status_item(
    content=None,
    on_press=None,
    *,
    icon=None,
    color=None,
    icon_color=None,
    selected=False,
    tooltip=None,
    keys=None,
    theme=None,
)
```

Un icono y/o texto en la barra de estado (diagnósticos, posición del cursor, lenguaje…).

| Propiedad | Por defecto | Descripción |
| --- | --- | --- |
| `content` | `None` | Texto. |
| `icon` | `None` | Nombre de un icono de Lucide (`pyzed icons` los lista). |
| `color` | `None` | Color del texto o del icono. |
| `icon_color` | `None` | Color del icono: un token del tema o un color hex. |
| `selected` | `False` | Lo marca como seleccionado. |
| `tooltip` | `None` | Texto del tooltip. |
| `keys` | `None` | Atajo que se muestra al final, escrito como texto: `"ctrl-s"`, `"cmd-k cmd-s"`. |
| `theme` | `None` | Tema a usar en lugar del actual (`pyzed.theme.current()`). |

Eventos: `on_press` ([eventos](#eventos)).

[Referencia completa →](https://albakore.github.io/pyzed/es/reference/ui/#status_item)

## Relacionados

- [Espacio de trabajo](https://albakore.github.io/pyzed/es/library/workspace/): La disposición de una ventana estilo editor: barra de título, docks, centro y barra de estado.
- [Barra de título](https://albakore.github.io/pyzed/es/library/title-bar/): La barra superior con los selectores de proyecto y rama.
- [Contador](https://albakore.github.io/pyzed/es/library/count-badge/): Un contador redondo que muestra 99+ por encima del máximo.
