在多页面应用程序中配置可用的页面。

在你的入口文件中调用st.navigation,并使用st.Page定义一个或多个页面。st.navigation返回当前页面,可以使用.run()方法执行。

当使用st.navigation时,你的入口文件(传递给streamlit run的文件)就像一个路由器或每个页面周围的公共元素的框架。Streamlit 在每次应用重新运行时都会执行入口文件。要执行当前页面,你必须在st.navigation返回的StreamlitPage对象上调用.run()方法。

可用页面的集合可以在每次重新运行时更新,以实现动态导航。默认情况下,st.navigation 会在侧边导航中绘制可用页面(如果有多个页面)。可以使用 position 关键字参数更改此行为。

一旦您的应用程序的任何会话执行了st.navigation命令,您的应用程序将忽略pages/目录(在所有会话中)。

函数签名[source]

st.navigation(pages, *, position="sidebar", expanded=False)

参数

pages (list[StreamlitPage] 或 dict[str, list[StreamlitPage]])

应用程序的可用页面。

要在导航菜单中创建带标签的部分或页面分组,pages 必须是一个字典。每个键是一个部分的标签,每个值是该部分的 StreamlitPage 对象列表。

要创建一个没有部分或页面分组的导航菜单,pages 必须是 StreamlitPage 对象的列表。

使用 st.Page 创建 StreamlitPage 对象。

position ("sidebar" 或 "hidden")

导航菜单的位置。如果 position"sidebar" (默认),导航小部件会出现在侧边栏的顶部。如果 position"hidden",导航小部件将不会显示。

如果 pages 中只有一个页面,无论 position 的值是什么,导航都会被隐藏。

expanded (bool)

导航菜单是否应展开。如果这是False (默认),导航菜单将折叠,并且在有太多页面无法显示时,将包括一个 按钮以查看更多选项。如果这是True,导航菜单将始终展开;不会 显示折叠菜单的按钮。

如果在重新运行时st.navigationexpanded=True更改为 expanded=False,菜单将保持展开状态,并且将显示一个 折叠按钮。

返回

(StreamlitPage)

用户当前选择的页面。

示例

以下示例展示了可能的入口点文件,这是您传递给streamlit run的文件。您的入口点文件管理您的应用程序的导航,并充当页面之间的路由器。

示例 1:使用可调用对象或 Python 文件作为页面

您可以从可调用对象或文件路径声明页面。

page_1.py(与你的入口文件在同一目录中):

import streamlit as st

st.title("Page 1")

您的入口文件:

import streamlit as st

def page_2():
    st.title("Page 2")

pg = st.navigation([st.Page("page_1.py"), st.Page(page_2)])
pg.run()

示例2:将页面分组为部分

你可以使用字典在导航菜单中创建部分。在下面的示例中,每个页面都类似于示例1中的页面1,并且所有页面都在同一个目录中。然而,你可以使用存储库中任何位置的Python文件。更多信息,请参见st.Page

目录结构:

your_repository/
├── create_account.py
├── learn.py
├── manage_account.py
├── streamlit_app.py
└── trial.py

streamlit_app.py:

import streamlit as st

pages = {
    "Your account": [
        st.Page("create_account.py", title="Create your account"),
        st.Page("manage_account.py", title="Manage your account"),
    ],
    "Resources": [
        st.Page("learn.py", title="Learn about us"),
        st.Page("trial.py", title="Try it out"),
    ],
}

pg = st.navigation(pages)
pg.run()

示例 3:跨多个页面的有状态小部件

当您希望小部件在页面之间保持状态时,请在入口点文件中调用小部件函数。为您的常用小部件分配键,并通过页面内的会话状态访问它们的值。

import streamlit as st

def page1():
    st.write(st.session_state.foo)

def page2():
    st.write(st.session_state.bar)

# Widgets shared by all the pages
st.sidebar.selectbox("Foo", ["A", "B", "C"], key="foo")
st.sidebar.checkbox("Bar", key="bar")

pg = st.navigation([st.Page(page1), st.Page(page2)])
pg.run()
forum

还有问题吗?

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