Python应用开发——30天学习Streamlit Python包进行APP的构建(16):执行流程

Execution flow

Change execution

默认情况下,Streamlit 应用程序会完全执行脚本,但我们允许在应用程序中使用某些功能来处理控制流。

st.experimental_dialog 

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

使用 @st.experimental_dialog 装饰的函数将成为对话框函数。调用对话框函数时,Streamlit 会在应用程序中插入一个模式对话框。在对话框函数中调用的 Streamlit 元素命令会在模式对话框中呈现。

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

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

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

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

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

警告

一个脚本运行中只能调用一个对话框函数,这意味着任何时候只能打开一个对话框。由于对话框也是一个片段,因此所有片段限制都适用。对话框不能包含片段,片段也不能包含对话框。不支持在部件回调函数中使用对话框。

Function signature[source]

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

Parameters

title (str)

The title to display at the top of the modal dialog. It cannot be empty.

width ("small", "large")

The width of the modal dialog. If width is "small (default), the modal dialog will be 500 pixels wide. If width is "large", the modal dialog will be about 750 pixels wide.

代码

 下面的示例演示了 @st.experimental_dialog 的基本用法。在此应用程序中,点击 "A "或 "B "将打开一个模式对话框,提示您输入投票理由。在模式对话框中,点击 "提交 "将您的投票记录到会话状态并重新运行应用程序。这将关闭模式对话框,因为在重新运行全脚本时不会调用对话框功能。

import streamlit as st

@st.experimental_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']}"

这段代码使用了Streamlit库来创建一个简单的投票应用。首先,它导入了Streamlit库,并定义了一个名为"vote"的函数,该函数被装饰为实验性对话框。在vote函数中,用户可以输入其喜欢的项目的原因,并且可以点击提交按钮来保存投票结果,并重新运行应用程序。

接下来,代码检查了会话状态中是否存在"vote"。如果不存在,它将显示"Vote for your favorite"的消息,并且用户可以点击"A"或"B"按钮来投票。如果存在"vote",则会显示用户之前的投票结果。

总的来说,这段代码实现了一个简单的投票应用,用户可以投票并查看他们的投票结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此星光明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值