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元素实现清除功能。
实现方式:
- 在UI中添加触发清除的动作按钮;
- 在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()方法控制其启用/禁用状态。
实现方式:
- 在UI中定义下载按钮(可初始设置为禁用);
- 在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
相关产品推荐
相关产品推荐

