Ir al contenido

Barra de pestañas

Una fila de pestañas de editor con controles opcionales al principio y al final. ui.Tab.for_file(path) crea una pestaña con el nombre del archivo, su icono y la ruta como id. dirty=True muestra un punto que se convierte en el botón de cerrar al pasar el ratón, preview=True pone el nombre en cursiva y status lo tiñe con un color de git. on_select(id) y on_close(id) reciben el id de la pestaña.

ui.tab_bar · Categoría: Navegación · Referencia completa →

Barra de pestañasBarra de pestañas
  • Para los documentos abiertos de un editor, o cualquier conjunto de vistas que se abren y cierran.
import pyzed as pz
from pyzed import ui
class Editor(pz.App):
def __init__(self):
self.open, self.active = ["main.py", "app.py"], "main.py"
def close(self, path):
i = self.open.index(path)
self.open.remove(path)
if self.active == path:
self.active = self.open[min(i, len(self.open) - 1)] if self.open else None
def view(self):
return ui.tab_bar([ui.Tab.for_file(p) for p in self.open], self.active,
on_select=lambda p: setattr(self, "active", p), on_close=self.close)
Barra de pestañas: Activa e inactivaBarra de pestañas: Activa e inactiva
Activa e inactiva
Código
pz.container(ui.tab_bar([ui.Tab.for_file("main.rs"), ui.Tab.for_file("app.rs")], "main.rs",
on_close=on_close), width=400)
Barra de pestañas: dirty=TrueBarra de pestañas: dirty=True
dirty=True
Código
pz.container(ui.tab_bar([ui.Tab.for_file("main.rs"), ui.Tab.for_file("notes.md", dirty=True)], "main.rs",
on_close=on_close), width=400)
Barra de pestañas: preview=TrueBarra de pestañas: preview=True
preview=True
Código
pz.container(ui.tab_bar([ui.Tab.for_file("README.md", preview=True)], "README.md", on_close=on_close), width=400)
Barra de pestañas: status="modified"Barra de pestañas: status="modified"
status="modified"
Código
pz.container(ui.tab_bar([ui.Tab.for_file("app.py", status="modified"),
ui.Tab.for_file("new.py", status="created")], "app.py", on_close=on_close), width=400)
Barra de pestañas: Tab(icon=)Barra de pestañas: Tab(icon=)
Tab(icon=)
Código
pz.container(ui.tab_bar([ui.Tab("home", "Home", icon="house"), ui.Tab("logs", "Logs", icon="scroll-text")],
"home", on_select=on_select), width=400)
Barra de pestañas: start=, end=Barra de pestañas: start=, end=
start=, end=
Código
pz.container(ui.tab_bar([ui.Tab.for_file("main.rs")], "main.rs", on_close=on_close,
start=[ui.icon_button("arrow-left", on_back, size="sm")],
end=[ui.icon_button("plus", on_new, size="sm")]), width=400)
Barra de pestañas: ui.tab(dimmed=True)Barra de pestañas: ui.tab(dimmed=True)
ui.tab(dimmed=True)
Código
pz.row([ui.tab(ui.Tab.for_file("main.rs"), active=True),
ui.tab(ui.Tab.for_file("app.rs"), active=False, dimmed=True)])

Un clic central cierra una pestaña, on_context(id) se ejecuta con un clic derecho y on_new con un doble clic en el espacio vacío.

Barra de pestañas: pinned=TrueBarra de pestañas: pinned=True
pinned=True
Código
ui.tab_bar([ui.Tab("app", "app.py", icon="file", pinned=True), ui.Tab("ui", "ui.py", icon="file")],
"ui", on_close=on_close, on_context=on_context, on_new=on_new)

Barra de pestañas tiene 7 eventos 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 y Eventos de cada componente.

Evento De El handler recibe Cuándo
on_select ui.tab_bar, ui.tab (tab_id) Callable que recibe el elemento elegido.
on_close ui.tab_bar, ui.tab (tab_id) Mensaje o callable que se envía al pulsar la X.
on_drag ui.tab_bar (tab_id) Se llama con el id de la pestaña cuando empieza a arrastrarse.
on_drop ui.tab_bar (tab_id, event) Se llama con el id de la pestaña y el Event al soltar la pestaña arrastrada: event.window_x/window_y (fuera de la ventana si se soltó fuera) y event.screen.
on_drag_over ui.tab_bar (index) Mientras dragging tiene valor: se llama con el índice de inserción bajo el puntero, o None cuando sale de la barra.
on_context ui.tab_bar (tab_id) Recibe el id de la pestaña en la que se hace clic derecho.
on_new ui.tab_bar () Se envía con un doble clic en el espacio vacío tras las pestañas.

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().

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.

class Editor(pz.App):
def __init__(self):
self.open, self.active = ["main.py", "app.py"], "main.py"
self.untitled = 0
def close(self, path): # on_close: the id of the tab
i = self.open.index(path)
self.open.remove(path)
if self.active == path:
self.active = self.open[min(i, len(self.open) - 1)] if self.open else None
def new(self): # on_new: double click after the tabs
self.untitled += 1
self.open.append(f"untitled-{self.untitled}")
self.active = self.open[-1]
def view(self):
return ui.tab_bar([ui.Tab.for_file(p) for p in self.open], self.active,
on_select=lambda p: setattr(self, "active", p), on_close=self.close,
on_new=self.new, on_context=lambda p: print("menu for", p))
tab_bar(
tabs,
active,
*,
on_select=None,
on_close=None,
start=(),
end=(),
height=32,
on_drag=None,
on_drop=None,
on_drag_over=None,
dragging=None,
drop_index=None,
on_context=None,
on_new=None,
theme=None,
)

Una fila de pestañas con controles opcionales al principio y al final (navegación, dividir, +). El botón de cerrar aparece en la activa y al pasar el ratón. Las pestañas se pueden arrastrar para reordenarlas o sacarlas de la ventana: ver Pestañas arrastrables.

Propiedad Por defecto Descripción
tabs obligatorio Lista de Tab.
active obligatorio Id de la pestaña activa.
start () Widgets al inicio (izquierda).
end () Widgets al final (derecha).
height 32 Alto.
dragging None Id de la pestaña que se arrastra (la apaga y activa on_drag_over).
drop_index None Dibuja la marca de inserción antes de la pestaña de este índice (len(tabs): después de la última).
theme None Tema a usar en lugar del actual (pyzed.theme.current()).

Eventos: on_select, on_close, on_drag, on_drop, on_drag_over, on_context, on_new (eventos).

Referencia completa →

@dataclass
class Tab(id, label, icon=None, icon_color=None, dirty=False, preview=False, status=None, pinned=False, tooltip=None)

Una pestaña. Tab.for_file(path, **kwargs) la crea con el nombre y el icono del archivo.

Propiedad Por defecto Descripción
id obligatorio Identificador estable para enfocarlo o desplazarlo con un Command.
label obligatorio Texto de la etiqueta.
icon None Nombre de un icono de Lucide (pyzed icons los lista).
icon_color None Color del icono: un token del tema o un color hex.
dirty False Cambios sin guardar (muestra un punto).
preview False Pestaña de vista previa (en cursiva).
status None Estado de git (tiñe el nombre).
pinned False Muestra solo el icono, no tiene botón de cerrar y va primera en tab_bar.
tooltip None Texto al pasar el ratón (la ruta completa…).

Referencia completa →

tab(item, *, active, on_select=None, on_close=None, height=32, dimmed=False, theme=None)

Una sola pestaña. Normalmente se usa tab_bar.

Propiedad Por defecto Descripción
item obligatorio El Tab.
active obligatorio Si es la activa.
height 32 Alto.
dimmed False Apaga la etiqueta (la pestaña que se arrastra).
theme None Tema a usar en lugar del actual (pyzed.theme.current()).

Eventos: on_select, on_close (eventos).

Referencia completa →