Reputation: 779
I would like to change the download buttons that appear based on the tab that is chosen. For example, if the tab is Main Visualization, I would like the following buttons to appear: download_heatmap and download_distribution. I would like download_piechart and download_barchart to only appear if "Additional Visualizations" tab is chosen. I'm running into problems when I try to apply this logic.
Here is the code:
from shiny import App, render, ui, reactive, session
import seaborn as sns
from shinywidgets import output_widget, render_widget
# Load the penguins dataset
penguins = sns.load_dataset("penguins").dropna()
# UI setup
app_ui = ui.page_fluid(
ui.layout_sidebar(
ui.sidebar(
ui.input_selectize("species", "Species:", choices=penguins["species"].unique().tolist(), multiple=True),
ui.input_selectize("island", "Island:", choices=penguins["island"].unique().tolist(), multiple=True),
),
# Place download buttons right below the sidebar
ui.output_ui("download_buttons"),
ui.navset_tab(
ui.nav_panel("Main Visualizations", output_widget("heatmap_plot")),
ui.nav_panel("Additional Visualizations", ui.h4("Pie Chart of Species Proportion"), output_widget("pie_chart")),
id = 'my_tabset'
)
)
)
# Server
def server(input, output, session):
filtered_data = reactive.Value(penguins)
# Monitor active tab and dynamically render download buttons
@output
@render.ui
def download_buttons():
active_tab = reactive.Value(input.my_tabset)
if active_tab == "Main Visualizations":
# Render buttons for Main Visualizations
return ui.div(
ui.download_button("download_heatmap", "Download Heatmap", class_="download-btn download-btn-main"),
ui.download_button("download_distribution", "Download Distribution Plot", class_="download-btn download-btn-main"),
style="margin-top: 15px;"
)
else:
# Render buttons for Additional Visualizations
return ui.div(
ui.download_button("download_piechart", "Download Pie Chart", class_="download-btn download-btn-additional"),
ui.download_button("download_barchart", "Download Bar Chart", class_="download-btn download-btn-additional"),
style="margin-top: 15px;"
)
# Create the app
app = App(app_ui, server)
Upvotes: 0
Views: 36