如何通过Shiny Python的input_action_button清空value_box内容?
解决方案:实现Shiny Python中Delete Data按钮清空Value Box内容
你的核心问题是当前数据仅绑定了add_data按钮的触发事件,无法响应删除操作。改用reactive.Value来存储数据,就能同时支持添加和清空逻辑,具体修改如下:
修改后的完整代码
from pathlib import Path from shiny import reactive from shiny.express import input, render, ui ui.page_opts(title="Stock explorer", fillable=True) # 初始化响应式变量,用于存储输入的数值,初始为空 stored_data_one = reactive.Value("") stored_data_two = reactive.Value("") with ui.sidebar(): ui.input_text("data_one","Insert Number",placeholder="Insert Number 1") ui.input_text("data_two","Insert Number",placeholder="Insert Number 2") ui.input_action_button("add_data", "Add Data", class_="btn-primary") ui.input_action_button("delete_data", "Delete Data", class_= "btn-danger") with ui.layout_column_wrap(fill=False): with ui.value_box(): "Number One" @render.ui def data_1(): return stored_data_one() with ui.value_box(): "Number 2" @render.ui def data_2(): return stored_data_two() ui.include_css(Path(__file__).parent / "styles.css") @reactive.Effect @reactive.event(input.add_data, ignore_none=False) def add_data_handler(): # 添加数据:将输入框的值存入响应式变量 stored_data_one.set(input.data_one()) stored_data_two.set(input.data_two()) @reactive.Effect @reactive.event(input.delete_data, ignore_none=False) def delete_data_handler(): # 删除数据:清空响应式变量的值 stored_data_one.set("") stored_data_two.set("")
关键修改说明
- 响应式变量存储:用
reactive.Value替代原有的@reactive.calc,让数据状态可以被主动修改,而不是仅依赖按钮触发计算 - 添加逻辑:通过
@reactive.Effect监听add_data按钮,点击时将输入框的值存入响应式变量 - 删除逻辑:同样用
@reactive.Effect监听delete_data按钮,点击时将响应式变量重置为空字符串,Value Box会自动更新为空
内容的提问来源于stack exchange,提问作者Dibakar Bose
相关产品推荐
相关产品推荐

