显示一个下载按钮小部件。

当您希望为用户提供一种直接从您的应用程序下载文件的方式时,这非常有用。

请注意,用户连接时,要下载的数据存储在内存中,因此最好将文件大小控制在几百兆字节以下以节省内存。

如果你想防止应用在用户点击下载按钮时重新运行,请将下载按钮包裹在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.markdownbody参数。

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")

一个可选的字符串,用于指定按钮类型。可以是以下之一:

  • "primary": 按钮的背景是应用程序的主色调,用于额外的强调。
  • "secondary" (默认): 按钮的背景与应用程序的背景颜色协调,用于正常的强调。
  • "tertiary": 按钮是纯文本,没有边框或背景,用于微妙的强调。

icon (str or None)

一个可选的emoji或图标,显示在按钮标签旁边。如果iconNone(默认),则不显示图标。如果icon是一个 字符串,以下选项有效:

  • 一个单字符的emoji。例如,你可以设置icon="🚨"icon="🔥"。不支持emoji短代码。

  • 来自Material Symbols库(圆角风格)的图标,格式为 ":material/icon_name:",其中"icon_name"是图标名称 的蛇形命名。

    例如,icon=":material/thumb_up:"将显示 Thumb Up图标。在Material Symbols 字体库中查找更多图标。

disabled (bool)

一个可选的布尔值,如果设置为True,则禁用下载按钮。默认值为False

use_container_width (bool)

是否将按钮的宽度扩展到其父容器的宽度。 如果 use_container_widthFalse(默认),Streamlit 会调整按钮的大小以适应其内容。如果 use_container_widthTrue,按钮的宽度将与其父容器的宽度匹配。

在这两种情况下,如果按钮的内容比父容器宽,内容将换行。

返回

(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",
    )
forum

还有问题吗?

我们的 论坛 充满了有用的信息和Streamlit专家。