Botón dividido
Un botón con un chevron separado a la derecha. on_press ejecuta la acción principal y on_menu suele abrir un ui.menu dentro de un ui.popover con las alternativas.
ui.split_button · Categoría: Acciones · Referencia completa →


pz.row([ ui.split_button("Run", on_run, on_menu, icon="play"), ui.split_button("Deploy", on_deploy, on_menu, variant="solid"),], spacing=12)Cuándo usarlo
Sección titulada «Cuándo usarlo»- Cuando una acción es la habitual pero hay algunas variantes (Ejecutar / Ejecutar con argumentos).
- Evítalo si las opciones son igual de importantes: usa un Select.
import pyzed as pzfrom pyzed import ui
class Runner(pz.App): def __init__(self): self.menu_open = False
def view(self): button = ui.split_button("Run", self.run, lambda: setattr(self, "menu_open", True), icon="play") menu = ui.menu([ui.MenuItem("Run with arguments…", self.run_args), ui.MenuItem("Debug", self.debug, icon="bug")]) if self.menu_open else None return ui.popover(button, menu, y=32, on_dismiss=lambda: setattr(self, "menu_open", False))Variantes
Sección titulada «Variantes»Variante
Sección titulada «Variante»

variant="filled"Código
ui.split_button("Run", on_run, on_menu, icon="play")

variant="ghost"Código
ui.split_button("Run", on_run, on_menu, icon="play", variant="ghost")

variant="outline"Código
ui.split_button("Run", on_run, on_menu, icon="play", variant="outline")

variant="solid"Código
ui.split_button("Deploy", on_deploy, on_menu, icon="rocket", variant="solid")

size="sm"Código
ui.split_button("Build", on_build, on_menu, size="sm")

size="md"Código
ui.split_button("Build", on_build, on_menu, size="md")

size="lg"Código
ui.split_button("Build", on_build, on_menu, size="lg")Contenido
Sección titulada «Contenido»

Código
ui.split_button("Merge", on_merge, on_menu)

icon="git-merge"Código
ui.split_button("Merge", on_merge, on_menu, icon="git-merge")Estados y eventos
Sección titulada «Estados y eventos»

tint="success"Código
ui.split_button("Deploy", on_press, on_menu, tint="success")

disabled=TrueCódigo
ui.split_button("Run", on_press, on_menu, disabled=True)Eventos
Sección titulada «Eventos»Botón dividido tiene 2 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 | El handler recibe | Cuándo |
|---|---|---|
on_press |
() |
Mensaje o callable que se envía al pulsar. None deshabilita el control. |
on_menu |
() |
Mensaje o callable del botón del menú. |
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
Sección titulada «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.
class Runner(pz.App): def __init__(self): self.menu_open = False self.last = "nothing yet"
def run(self, how="run"): self.last, self.menu_open = how, False
def view(self): button = ui.split_button("Run", self.run, # on_press: the main action lambda: setattr(self, "menu_open", True), # on_menu: the arrow icon="play") menu = ui.menu([ui.MenuItem("Debug", lambda: self.run("debug"), icon="bug")]) return pz.column([ ui.popover(button, menu if self.menu_open else None, y=32, on_dismiss=lambda: setattr(self, "menu_open", False)), ui.label(f"Last: {self.last}"), ], spacing=8)from dataclasses import dataclass
@dataclassclass Run: how: str = "run"
class Runner(pz.App): menu_open = False last = "nothing yet"
def update(self, message): match message: case Run(how): self.last, self.menu_open = how, False case "menu": self.menu_open = True case "dismiss": self.menu_open = False
def view(self): menu = ui.menu([ui.MenuItem("Debug", Run("debug"), icon="bug")]) return ui.popover(ui.split_button("Run", Run(), "menu", icon="play"), menu if self.menu_open else None, y=32, on_dismiss="dismiss")from dataclasses import dataclass
@dataclass(frozen=True)class State: menu_open: bool = False last: str = "nothing yet"
def view(state, set_state): run = lambda how: set_state(last=how, menu_open=False) menu = ui.menu([ui.MenuItem("Debug", lambda: run("debug"), icon="bug")]) return ui.popover( ui.split_button("Run", lambda: run("run"), lambda: set_state(menu_open=True), icon="play"), menu if state.menu_open else None, y=32, on_dismiss=lambda: set_state(menu_open=False))Propiedades y API
Sección titulada «Propiedades y API»ui.split_button
Sección titulada «ui.split_button»split_button( content, on_press=None, on_menu=None, *, icon=None, variant='filled', tint=None, size='md', disabled=False, tooltip=None, theme=None,)Un botón con una flecha aparte para más opciones. on_press ejecuta la acción principal y on_menu normalmente abre un ui.menu en un ui.popover.
| Propiedad | Por defecto | Descripción |
|---|---|---|
content |
obligatorio | Texto del botón. |
icon |
None |
Nombre de un icono de Lucide (pyzed icons los lista). |
variant |
"filled" |
Como en ui.button. |
tint |
None |
Como en ui.button. |
size |
"md" |
"xs", "sm", "md" o "lg". |
disabled |
False |
Desactiva las dos mitades. |
tooltip |
None |
Tooltip de la mitad principal. |
theme |
None |
Tema a usar en lugar del actual (pyzed.theme.current()). |
Eventos: on_press, on_menu (eventos).