You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:43:19