R

ReflexKR

Reflex公式ドキュメント

コンポーネント工房:Reflexライブラリ100

·

講座の概要

レイアウト

·

Box

·

Flex

·

Stack

·

Grid

·

Container

·

Section

·

Center

·

Spacer

·

Separator

·

Card

·

Inset

·

Aspect Ratio

·

Fragment

タイポグラフィ

·

Text

·

Heading

·

Link

·

Code

·

Markdown

·

Blockquote

·

Quote

·

Strong

·

Em

·

Kbd

フォーム

·

Button

·

Input

·

Text Area

·

Checkbox

·

Switch

·

Radio Group

·

Select

·

Slider

·

Form

·

Upload

データ表示

·

Badge

·

Avatar

·

Icon

·

Callout

·

List

·

Data List

·

Code Block

·

Progress

·

Spinner

·

Scroll Area

·

Moment

開閉と切り替え

·

Tabs

·

Accordion

·

Segmented Control

オーバーレイ

·

Tooltip

·

Popover

·

Hover Card

·

Dialog

·

Alert Dialog

·

Drawer

·

Dropdown Menu

·

Context Menu

·

Toast

動的レンダリング

·

Cond

·

Match

·

Foreach

·

Auto Scroll

メディア

·

Image

·

Audio

·

Video

表とデータグリッド

·

Table

·

Data Table

·

Data Editor

チャート

·

Area Chart

·

Bar Chart

·

Line Chart

·

Composed Chart

·

Pie Chart

·

Radar Chart

·

Radial Bar Chart

·

Scatter Chart

·

Funnel Chart

·

Treemap

·

Sankey Chart

·

Error Bar

チャートの部品

·

Axis

·

Cartesian Grid

·

Chart Tooltip

·

Legend

·

Label

·

Reference

·

Brush

ほかのチャートライブラリ

·

Plotly

·

Pyplot

HTML要素

·

HTML

·

HTML Text

·

HTML Layout

·

HTML Forms

·

HTML Media

·

HTML Tables

·

SVG

そのほかの道具

·

Theme

·

Skeleton

·

Clipboard

·

Html Embed

·

Script

·

Memo

コンポーネント工房:Reflexライブラリ100
開閉と切り替え

Segmented Control

rx.segmented_control.rootrx.segmented_control.item

公式ドキュメント

工房の注文書

商品一覧の上に「グリッド / リスト」の表示切り替えを付け、選んだほうの形で商品を見せてください。

セグメンテッドコントロールは、決まったいくつかの値や画面からひとつを選ぶボタンのまとまりです。「Inbox / Drafts / Sent」のように、ひとつだけがオンになる選択をはっきり見せます。ドロップダウンは選んだ値しか見えず、ボタンを何個も並べるとどれがオンなのかわかりにくいのに対し、セグメンテッドコントロールは選択肢全体と今選んでいるものを一緒に見せます。

rx.segmented_control.rootがrx.segmented_control.itemをまとめ、各itemは表示する文字と一意のvalueを持ちます。

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

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で大きさを、variantで下地の形を、color_schemeで選んだ枠の色を、radiusで角を決めます。
パーツプロパティ値用途
rootdefault_valueitemのvalue最初に選ばれている値(非制御)
rootvalue + on_changeStateの値、イベント選んだ値をStateで扱う(制御)
roottype"single"(既定) "multiple"ひとつだけ選ぶか、複数選ぶか
rootsize"1" "2"(既定) "3"大きさ
rootvariant"surface"(既定) "classic"下地の形
rootcolor_scheme · radiusRadixの色名、角の値色と角
itemvalue文字列(一意)この枠の値

Stateとつなぐ

公式ドキュメントの基本の例のように、valueにStateの値を、on_changeにその値を変えるイベントをつなぎます。枠を選ぶとon_changeが選んだitemのvalueを渡し、Stateが変わると画面のほかの場所も一緒に変わります。ここでは選んだ値で文字の揃え方を変えています。

on_changeはtypeによって文字列か文字列のリストを渡すので、ハンドラの引数の型はstr | list[str]と書く必要があります。strだけにすると、Reflexが型が合わないというエラーを出します。

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%",
)

複数を選ぶ

type="multiple"なら複数の枠を同時にオンにでき、値はリストになります。itemの中には文字の代わりにアイコンを入れることもできます。下は太字・斜体・下線のボタンです。Reflex 0.10はコンポーネントを作るときにtypeが"multiple"かどうかを直接確かめるので、typeはStateの値ではなく固定の値で渡します。そのため実習台にも入れていません。

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"),
)

注文書を仕上げる

選んだ値に応じてrx.condでグリッドとリストを切り替えて見せます。itemにはアイコンと文字を一緒に入れました。

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",
)

工房ノート

  • segmented_control.rootの中にsegmented_control.item("テキスト", value=…)を入れる。

  • default_valueで非制御、value + on_changeでStateが扱う(制御)。

  • on_changeハンドラの引数の型はstr | list[str]。

  • type="multiple"なら複数の枠をオンにでき、値はリストになる。

  • size · variant(surface · classic) · color_scheme · radiusで見た目を決める。

← 前へ

開閉と切り替え · Accordion

次へ →

オーバーレイ · Tooltip

新しい授業・講座のお知らせを受け取る

この講座に授業が追加されたり、続きの講座が公開されたりしたらメールでお知らせします。

収集項目:メールアドレス・目的:この講座の新しい授業・公開のお知らせ・保有期間:解除のご依頼まで。他の目的には使わず、第三者にも提供しません。お知らせメールに返信いただければすぐに削除します。

質問と回答

この回について気になることを書き込んでください。すべての言語のページの質問がここに集まります。

リンクや書式なしで、そのままの文字で表示されます。

R

ReflexKR

触って学ぶPythonとReflex。すべての例はReflex 0.10.0で実際に動かして確認しています。

ReflexKRはバナー広告なし・無料で運営しています。役に立ったら、コーヒー一杯で応援してください。 ☕ コーヒーで応援する

アフィリエイトと支援について
한국어English日本語简体中文EspañolDeutsch

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

Built with Reflex