R

ReflexKR

Documentación de Reflex

El taller de componentes: los 100 componentes de Reflex

·

Resumen del curso

Diseño

·

Box

·

Flex

·

Stack

·

Grid

·

Container

·

Section

·

Center

·

Spacer

·

Separator

·

Card

·

Inset

·

Aspect Ratio

·

Fragment

Tipografía

·

Text

·

Heading

·

Link

·

Code

·

Markdown

·

Blockquote

·

Quote

·

Strong

·

Em

·

Kbd

Formularios

·

Button

·

Input

·

Text Area

·

Checkbox

·

Switch

·

Radio Group

·

Select

·

Slider

·

Form

·

Upload

Visualización de datos

·

Badge

·

Avatar

·

Icon

·

Callout

·

List

·

Data List

·

Code Block

·

Progress

·

Spinner

·

Scroll Area

·

Moment

Mostrar y ocultar

·

Tabs

·

Accordion

·

Segmented Control

Superposiciones

·

Tooltip

·

Popover

·

Hover Card

·

Dialog

·

Alert Dialog

·

Drawer

·

Dropdown Menu

·

Context Menu

·

Toast

Renderizado dinámico

·

Cond

·

Match

·

Foreach

·

Auto Scroll

Multimedia

·

Image

·

Audio

·

Video

Tablas y cuadrículas de datos

·

Table

·

Data Table

·

Data Editor

Gráficos

·

Area Chart

·

Bar Chart

·

Line Chart

·

Composed Chart

·

Pie Chart

·

Radar Chart

·

Radial Bar Chart

·

Scatter Chart

·

Funnel Chart

·

Treemap

·

Sankey Chart

·

Error Bar

Piezas de gráficos

·

Axis

·

Cartesian Grid

·

Chart Tooltip

·

Legend

·

Label

·

Reference

·

Brush

Otras bibliotecas de gráficos

·

Plotly

·

Pyplot

Elementos HTML

·

HTML

·

HTML Text

·

HTML Layout

·

HTML Forms

·

HTML Media

·

HTML Tables

·

SVG

Otras herramientas

·

Theme

·

Skeleton

·

Clipboard

·

Html Embed

·

Script

·

Memo

El taller de componentes: los 100 componentes de Reflex
Mostrar y ocultar

Segmented Control

rx.segmented_control.rootrx.segmented_control.item

Documentación oficial

Pedido del taller

Encima de la lista de productos, añade un selector de vista «Cuadrícula / Lista» y muestra los productos con la forma elegida.

El control segmentado es un grupo de botones para elegir uno entre unos pocos valores o vistas predefinidos. Deja claro qué opción está activa cuando solo puede haber una, como "Inbox / Drafts / Sent". Un desplegable solo muestra el valor elegido, y con varios botones sueltos no se nota bien cuál está activo; el control segmentado muestra a la vez todas las opciones y la elegida.

rx.segmented_control.root agrupa los rx.segmented_control.item, y cada item tiene un texto visible y un value único.

rx.segmented_control.root(
    rx.segmented_control.item("Inbox", value="inbox"),
    rx.segmented_control.item("Drafts", value="drafts"),
    rx.segmented_control.item("Sent", value="sent"),
    default_value="inbox",
)

Prueba las propiedades

Prueba las propiedades

size

variant

color

radius

rx.segmented_control.root(
    rx.segmented_control.item("Inbox", value="inbox"),
    rx.segmented_control.item("Drafts", value="drafts"),
    rx.segmented_control.item("Sent", value="sent"),
    default_value="inbox",
    size="2",
    variant="surface",
    color_scheme="indigo",
    radius="medium",
)
size fija el tamaño, variant el aspecto del fondo, color_scheme el color de la opción elegida y radius las esquinas.
PiezaPropiedadValoresUso
rootdefault_valuevalue de un itemValor elegido al principio (no controlado)
rootvalue + on_changeValor del State, eventoGestiona el valor elegido con el State (controlado)
roottype"single" (por defecto) "multiple"Elegir solo uno, o varios
rootsize"1" "2" (por defecto) "3"Tamaño
rootvariant"surface" (por defecto) "classic"Aspecto del fondo
rootcolor_scheme · radiusNombre de color Radix, valor de esquinasColor y esquinas
itemvalueCadena (única)Valor de esta opción

Conectarlo con el State

Como en el ejemplo básico de la documentación oficial, conecta un valor del State a value y, a on_change, el evento que lo cambia. Al elegir una opción, on_change envía el value del item elegido y, cuando cambia el State, cambian también otras partes de la pantalla. Aquí el valor elegido cambia la alineación del texto.

Según type, on_change envía una cadena o una lista de cadenas, así que el tipo del argumento del handler debe ser str | list[str]. Si pones solo str, Reflex da un error de tipos incompatibles.

Aligned left

class SegmentedAlignState(rx.State):
    control: str = "left"

    @rx.event
    def set_segmented_align(self, value: str | list[str]):
        if isinstance(value, str):
            self.control = value


rx.vstack(
    rx.segmented_control.root(
        rx.segmented_control.item("Left", value="left"),
        rx.segmented_control.item("Center", value="center"),
        rx.segmented_control.item("Right", value="right"),
        value=SegmentedAlignState.control,
        on_change=SegmentedAlignState.set_segmented_align,
    ),
    rx.card(
        rx.text("Aligned " + SegmentedAlignState.control, align=SegmentedAlignState.control),
        width="100%",
    ),
    width="100%",
)

Elegir varios

Con type="multiple" puedes activar varias opciones a la vez, y el valor pasa a ser una lista. Dentro de un item también puedes poner un icono en lugar de texto. Abajo hay botones de negrita, cursiva y subrayado. Reflex 0.10 comprueba al crear el componente si type es "multiple", así que type se da como valor fijo, no como valor del State. Por eso tampoco está en el banco de pruebas.

Sample text

value = bold

class SegmentedStyleState(rx.State):
    styles: list[str] = ["bold"]

    @rx.event
    def set_segmented_styles(self, value: str | list[str]):
        self.styles = [value] if isinstance(value, str) else list(value)


rx.vstack(
    rx.segmented_control.root(
        rx.segmented_control.item(rx.icon("bold", size=16), value="bold"),
        rx.segmented_control.item(rx.icon("italic", size=16), value="italic"),
        rx.segmented_control.item(rx.icon("underline", size=16), value="underline"),
        type="multiple",
        value=SegmentedStyleState.styles,
        on_change=SegmentedStyleState.set_segmented_styles,
    ),
    rx.text(
        "Sample text",
        weight=rx.cond(SegmentedStyleState.styles.contains("bold"), "bold", "regular"),
        font_style=rx.cond(SegmentedStyleState.styles.contains("italic"), "italic", "normal"),
        text_decoration=rx.cond(SegmentedStyleState.styles.contains("underline"), "underline", "none"),
    ),
    rx.text("value = ", SegmentedStyleState.styles.join(", "), size="1", color_scheme="gray"),
)

Completar el pedido

Según el valor elegido, rx.cond alterna entre cuadrícula y lista. Cada item lleva icono y texto.

Item 1

Item 2

Item 3

Item 4

Item 5

Item 6

class SegmentedViewState(rx.State):
    view: str = "grid"

    @rx.event
    def set_segmented_view(self, value: str | list[str]):
        if isinstance(value, str):
            self.view = value


rx.vstack(
    rx.segmented_control.root(
        rx.segmented_control.item(rx.icon("layout-grid", size=14), "Grid", value="grid"),
        rx.segmented_control.item(rx.icon("list", size=14), "List", value="list"),
        value=SegmentedViewState.view,
        on_change=SegmentedViewState.set_segmented_view,
        size="1",
    ),
    rx.cond(
        SegmentedViewState.view == "grid",
        rx.grid(*[rx.card(rx.text("Item ", i), height="60px") for i in range(1, 7)], columns="3", spacing="2", width="100%"),
        rx.vstack(*[rx.card(rx.text("Item ", i), width="100%") for i in range(1, 7)], spacing="2", width="100%"),
    ),
    width="100%",
    max_width="420px",
)

Notas del taller

  • Dentro de segmented_control.root van los segmented_control.item("texto", value=…).

  • default_value para no controlado; value + on_change para que lo gestione el State (controlado).

  • El tipo del argumento del handler de on_change es str | list[str].

  • Con type="multiple" se activan varias opciones y el valor es una lista.

  • El aspecto se define con size · variant (surface · classic) · color_scheme · radius.

← Anterior

Mostrar y ocultar · Accordion

Siguiente →

Superposiciones · Tooltip

Recibe avisos de nuevas lecciones

Te avisaremos por correo cuando este curso tenga lecciones nuevas o se abra un curso de continuación.

Datos: tu correo electrónico · Finalidad: avisos de nuevas lecciones o de la publicación de este curso · Conservación: hasta que pidas que lo borremos. No lo usamos para nada más ni lo compartimos. Responde a cualquier aviso y lo borraremos enseguida.

Preguntas y respuestas

Pregunta lo que quieras sobre esta lección. Aquí se reúnen las preguntas de todas las versiones de idioma de esta página.

Se muestra como texto plano, sin enlaces ni formato.

R

ReflexKR

Aprende Python y Reflex haciendo. Todos los ejemplos se ejecutaron y verificaron en Reflex 0.10.0.

ReflexKR es gratis y sin banners publicitarios. Si te ayudó, puedes apoyarlo con un café. ☕ Invítanos un café

Aviso de afiliados
한국어English日本語简体中文EspañolDeutsch

© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0

Built with Reflex