用于创建模态对话框的函数装饰器。

使用@st.dialog装饰的函数将成为一个对话框函数。当你调用一个对话框函数时,Streamlit会在你的应用中插入一个模态对话框。在对话框函数内调用的Streamlit元素命令将在模态对话框内渲染。

对话框函数可以接受在调用时传递的参数。通常需要从更广泛的应用程序中访问的对话框中的任何值应存储在会话状态中。

用户可以通过点击模态对话框外部、点击右上角的“X”或按键盘上的ESC来关闭模态对话框。关闭模态对话框不会触发应用程序重新运行。要以编程方式关闭模态对话框,请在对话框函数内显式调用st.rerun()

st.dialog 继承了 st.fragment 的行为。 当用户与在对话框函数内创建的输入小部件交互时,Streamlit 只会重新运行对话框函数,而不是整个脚本。

在对话框函数中调用st.sidebar是不被支持的。

对话框代码可以与会话状态、导入的模块以及在对话框外部创建的其他Streamlit元素进行交互。请注意,这些交互在多次对话框重新运行时是累积的。您需要负责处理该行为可能产生的任何副作用。

警告

在一个脚本运行中只能调用一个对话框函数,这意味着在任何给定时间只能打开一个对话框。

函数签名[source]

st.dialog(title, *, width="small")

参数

title (str)

显示在模态对话框顶部的标题。它不能为空。

width ("small", "large")

模态对话框的宽度。如果width"small(默认值),模态对话框的宽度将为500像素。如果width"large",模态对话框的宽度将约为750像素。

示例

以下示例演示了@st.dialog的基本用法。 在此应用中,点击“A”或“B”将打开一个模态对话框,并提示您 输入投票的原因。在模态对话框中,点击“提交”以记录 您的投票到会话状态并重新运行应用。这将关闭模态对话框, 因为在完整脚本重新运行期间未调用对话框函数。

import streamlit as st

@st.dialog("Cast your vote")
def vote(item):
    st.write(f"Why is {item} your favorite?")
    reason = st.text_input("Because...")
    if st.button("Submit"):
        st.session_state.vote = {"item": item, "reason": reason}
        st.rerun()

if "vote" not in st.session_state:
    st.write("Vote for your favorite")
    if st.button("A"):
        vote("A")
    if st.button("B"):
        vote("B")
else:
    f"You voted for {st.session_state.vote['item']} because {st.session_state.vote['reason']}"
forum

还有问题吗?

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