在多页面应用程序中配置可用的页面。
在你的入口文件中调用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.navigation从expanded=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()
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。