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

Shiny for Python是否提供ui.update_input_file和ui.update_download_button方法?

Shiny for Python:清除文件输入与控制下载按钮状态

一、清除ui.input_file()的已选文件

Shiny for Python目前没有内置的update_input_file()方法,但可以通过JavaScript直接操作DOM元素实现清除功能。

实现方式:

  1. 在UI中添加触发清除的动作按钮;
  2. 在Server端监听按钮点击事件,执行JS代码重置文件输入框的value属性。

代码示例:

from shiny import App, ui, session

app_ui = ui.page_fluid(
    ui.input_file("upload", "选择文件"),
    ui.input_action_button("clear_file", "清除已选文件"),
)

def server(input, output, session):
    @session.on_click("clear_file")
    def clear_uploaded_file():
        # 执行JS代码重置文件输入框
        session.run_js("document.getElementById('upload').value = '';")

app = App(app_ui, server)

二、启用/禁用ui.download_button()

ui.download_button()属于动作按钮类组件,可直接用ui.update_action_button()方法控制其启用/禁用状态。

实现方式:

  1. 在UI中定义下载按钮(可初始设置为禁用);
  2. 在Server端监听控制条件(如文件是否上传、复选框状态等),动态更新按钮的disabled参数。

代码示例:

from shiny import App, ui, reactive, session

app_ui = ui.page_fluid(
    ui.input_file("upload", "选择文件"),
    ui.download_button("download", "下载文件", disabled=True),
)

def server(input, output, session):
    # 根据文件是否上传控制下载按钮状态
    @reactive.Effect
    def update_download_btn():
        ui.update_action_button(
            id="download",
            disabled=len(input.upload()) == 0
        )
    
    # 示例下载逻辑
    @output
    @ui.download(filename="output.txt")
    def download():
        yield "示例下载内容"

app = App(app_ui, server)

也可通过复选框手动控制:

# UI部分添加复选框
ui.input_checkbox("enable_download", "启用下载", value=False)

# Server端监听复选框状态
@reactive.Effect
def update_download_btn():
    ui.update_action_button(
        id="download",
        disabled=not input.enable_download()
    )

内容的提问来源于stack exchange,提问作者gernophil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:59:59