立即重新运行脚本。

当调用st.rerun()时,Streamlit 会停止当前脚本的运行,并且不再执行后续的语句。Streamlit 会立即将脚本排队以重新运行。

在片段中使用st.rerun时,您可以将重新运行的范围限定在片段内。但是,如果片段作为完整应用程序重新运行的一部分运行,则不允许进行片段范围的重新运行。

函数签名[source]

st.rerun(*, scope="app")

参数

scope ("app" 或 "fragment")

指定应用程序的哪一部分应重新运行。如果 scope"app" (默认),整个应用程序将重新运行。如果 scope"fragment", Streamlit 只会重新运行调用此命令的片段。

设置 scope="fragment" 仅在片段重新运行期间有效。如果在 整个应用程序重新运行期间或在片段外部调用 st.rerun(scope="fragment"), Streamlit 将引发 StreamlitAPIException

st.rerun 是控制应用程序逻辑的工具之一。虽然它非常适合原型设计,但可能会有一些不利的副作用:

  • 额外的脚本运行可能效率低下且速度较慢。
  • 过多的重新运行可能会使您的应用程序逻辑复杂化,并且更难跟踪。
  • 如果误用,无限循环可能会导致您的应用程序崩溃。

在许多情况下,st.rerun 可以工作,回调 可能是一个更简洁的替代方案。容器 也可能有所帮助。

使用 st.rerun 更新较早的标题
import streamlit as st if "value" not in st.session_state: st.session_state.value = "Title" ##### Option using st.rerun ##### st.header(st.session_state.value) if st.button("Foo"): st.session_state.value = "Foo" st.rerun()
使用回调更新较早的标题
##### Option using a callback ##### st.header(st.session_state.value) def update_value(): st.session_state.value = "Bar" st.button("Bar", on_click=update_value)
使用容器更新较早的头部
##### Option using a container ##### container = st.container() if st.button("Baz"): st.session_state.value = "Baz" container.header(st.session_state.value)
forum

还有问题吗?

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