显示一个下载按钮小部件。
当您希望为用户提供一种直接从您的应用程序下载文件的方式时,这非常有用。
请注意,用户连接时,要下载的数据存储在内存中,因此最好将文件大小控制在几百兆字节以下以节省内存。
如果你想防止应用在用户点击下载按钮时重新运行,请将下载按钮包裹在fragment中。
| 函数签名[source] | |
|---|---|
st.download_button(label, data, file_name=None, mime=None, key=None, help=None, on_click=None, args=None, kwargs=None, *, type="secondary", icon=None, disabled=False, use_container_width=False) | |
| 参数 | |
label (str) | 一个简短的标签,向用户解释此按钮的用途。 标签可以选择性地包含以下类型的GitHub风格的Markdown:粗体、斜体、删除线、内联代码、链接和图片。图片显示为图标,最大高度等于字体高度。 不支持的Markdown元素会被解包,因此只有它们的子元素(文本内容)会呈现。通过反斜杠转义不支持的元素,将其显示为字面字符。例如, "1\. 不是有序列表"。 有关其他支持的Markdown指令,请参见st.markdown的body参数。 |
data (str or bytes or file) | 要下载的文件内容。请参阅下面的示例,了解避免不必要地重新计算此数据的缓存技术。 |
file_name (str) | 一个可选的字符串,用作要下载的文件名, 例如 'my_file.csv'。如果未指定,名称将 自动生成。 |
mime (str or None) | 数据的MIME类型。如果为None,则默认为"text/plain" (如果数据是str类型或是文本文件)或 "application/octet-stream"(如果数据是bytes类型或是 二进制文件)。 |
key (str or int) | 一个可选的字符串或整数,用作小部件的唯一键。 如果省略,将根据小部件的内容生成一个键。 任何两个小部件都不能有相同的键。 |
help (str) | 一个可选的工具提示,当鼠标悬停在按钮上时会显示。 |
on_click (callable) | 当点击此按钮时调用的可选回调函数。 |
args (tuple) | 传递给回调函数的可选参数元组。 |
kwargs (dict) | 一个可选的字典,用于传递给回调函数。 |
type ("primary", "secondary", or "tertiary") | 一个可选的字符串,用于指定按钮类型。可以是以下之一:
|
icon (str or None) | 一个可选的emoji或图标,显示在按钮标签旁边。如果icon 是None(默认),则不显示图标。如果icon是一个 字符串,以下选项有效:
|
disabled (bool) | 一个可选的布尔值,如果设置为True,则禁用下载按钮。默认值为False。 |
use_container_width (bool) | 是否将按钮的宽度扩展到其父容器的宽度。 如果 use_container_width 是 False(默认),Streamlit 会调整按钮的大小以适应其内容。如果 use_container_width 是 True,按钮的宽度将与其父容器的宽度匹配。 在这两种情况下,如果按钮的内容比父容器宽,内容将换行。 |
| 返回 | |
(bool) | 如果在上次运行应用程序时点击了按钮,则为True,否则为False。 |
示例
下载一个大型DataFrame为CSV文件:
import streamlit as st @st.cache_data def convert_df(df): # IMPORTANT: Cache the conversion to prevent computation on every rerun return df.to_csv().encode("utf-8") csv = convert_df(my_large_df) st.download_button( label="Download data as CSV", data=csv, file_name="large_df.csv", mime="text/csv", )将字符串下载为文件:
import streamlit as st text_contents = '''This is some text''' st.download_button("Download some text", text_contents)下载一个二进制文件:
import streamlit as st binary_contents = b"example content" # Defaults to "application/octet-stream" st.download_button("Download binary file", binary_contents)下载图片:
import streamlit as st with open("flower.png", "rb") as file: btn = st.download_button( label="Download image", data=file, file_name="flower.png", mime="image/png", )
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。