使用ui.busy_indicators时ui.output_table不显示加载spinner的问题
问题分析
ui.busy_indicators的全局加载指示器无法在ui.output_table上触发,本质是output_table的渲染事件未被全局busy监听机制捕获,而output_plot和output_data_frame的异步渲染流程会正确触发busy状态。
解决方案
有两种可行的解决方式:
方式一:替换为ui.output_data_frame(推荐)
直接用ui.output_data_frame和render.data_frame替代output_table和render.table,这组组件天然兼容全局busy指示器,还支持排序、筛选等交互功能:
import time import numpy as np from shiny import App, render, ui import pandas as pd app_ui = ui.page_fluid( ui.output_data_frame("table"), ui.busy_indicators.use(), ) def server(input): @render.data_frame def table(): time.sleep(3) df = pd.DataFrame(np.random.randn(10, 10), columns=[f'col_{i}' for i in range(10)]) return render.DataGrid(df) app = App(app_ui, server)
方式二:手动为output_table添加专属spinner
如果必须保留output_table,可以用ui.busy_indicators.spinner直接包裹ui.output_table,强制为该组件绑定加载指示器:
import time import numpy as np from shiny import App, render, ui import pandas as pd app_ui = ui.page_fluid( ui.busy_indicators.spinner(ui.output_table("table")), ui.busy_indicators.use(), ) def server(input): @render.table def table(): time.sleep(3) df = pd.DataFrame(np.random.randn(10, 10), columns=[f'col_{i}' for i in range(10)]) return df app = App(app_ui, server)
内容的提问来源于stack exchange,提问作者zack
相关产品推荐
相关产品推荐

