express.ui.update_accordion_panel
express.ui.update_accordion_panel(id,
target,*body,
=MISSING,
title=MISSING,
value=MISSING,
icon=None,
show=None,
session )
Dynamically update accordion panel contents.
Dynamically (i.e., programmatically) update/modify accordion panels in a Shiny app. These functions require an id
to be provided to the accordion and must also be called within an active Shiny session.
Parameters
id : str
-
A string that matches an existing accordion’s
id
. target : str
-
The
value
of an existing panel to update. *body : TagChild = ()
-
If provided, the new body contents of the panel.
title : TagChild | None | MISSING_TYPE = MISSING
-
If not missing, the new title of the panel.
value : str | None | MISSING_TYPE = MISSING
-
If not missing, the new value of the panel.
icon : TagChild | None | MISSING_TYPE = MISSING
-
If not missing, the new icon of the panel.
session : Optional[
Session
] = None-
A Shiny session object (the default should almost always be used).
References
See Also
Examples
#| standalone: true
#| components: [editor, viewer]
#| layout: vertical
#| viewerHeight: 400
## file: app.py
from shiny import reactive
from shiny.express import input, ui
ui.input_switch("update_panel", "Update (and open) Sections")
with ui.accordion(id="acc", multiple=True):
for letter in "ABCDE":
with ui.accordion_panel(f"Section {letter}", value=f"sec_{letter}"):
f"Some narrative for section {letter}"
@reactive.effect
@reactive.event(input.update_panel)
def _():
txt = " (updated)" if input.update_panel() else ""
show = bool(input.update_panel() % 2 == 1)
for letter in "ABCDE":
ui.update_accordion_panel(
"acc",
f"sec_{letter}",
f"Some{txt} narrative for section {letter}",
title=f"Section {letter}{txt}",
# Open Accordion Panel to see updated contents
show=show,
)
next_show_txt = "close" if show else "open"
ui.update_switch("update_panel", label=f"Update (and {next_show_txt}) Sections")