文章目录
1. st.navigation:自定义多页面导航生成器
功能说明
新一代多页面应用路由核心API,在入口文件统一管理全部页面,支持页面分组、侧边/隐藏两种导航位置、菜单折叠控制,完全替代传统pages/文件夹自动路由。返回当前选中的页面对象,调用.run()渲染页面内容。
核心参数
| 参数 | 说明 |
|---|---|
pages |
页面列表或分组字典:列表为平铺页面;字典键为分组标题,值为该分组下st.Page对象列表 |
position |
导航菜单位置:sidebar侧边栏顶部、hidden完全隐藏导航 |
expanded |
导航菜单默认展开状态,True永久展开、False默认折叠 |
代码示例
python
import streamlit as st
# 定义分组页面
page_groups = {
"数据工具": [
st.Page("data_upload.py", title="数据上传", icon="📤"),
st.Page("data_analysis.py", title="数据分析", icon="📊")
],
"系统设置": [
st.Page("setting.py", title="账号设置", icon="⚙️", default=True)
]
}
# 生成侧边导航
current_page = st.navigation(page_groups, position="sidebar")
# 执行当前选中页面
current_page.run()

2. st.Page:页面对象构造类
功能说明
用来封装单页信息的构造函数,生成StreamlitPage实例,传入st.navigation注册页面;支持本地py文件、Python函数两种页面源,可自定义页面标题、图标、路由地址、默认首页。
核心参数
| 参数 | 说明 |
|---|---|
page |
页面源:py文件相对路径 / 无参Python函数 |
title |
导航菜单展示的页面名称,不填自动读取文件名/函数名 |
icon |
导航图标,支持Emoji、Material图标 |
url_path |
浏览器路由后缀,默认自动生成;default=True时为空根路由 |
default |
是否设为应用默认首页,打开App自动加载该页面 |
代码示例
python
import streamlit as st
# 1. 文件页面
page_file = st.Page("dashboard.py", title="数据看板", icon=":material/bar_chart:", default=True)
# 2. 函数页面
def func_page():
st.title("函数页面")
page_func = st.Page(func_page, title="工具页面", icon="🔧")
st.navigation([page_file, page_func]).run()

3. st.page_link:页面跳转链接
功能说明
页面内渲染跳转按钮/链接,分为内部应用页面跳转 、外部网址跳转两种模式;点击后直接切换页面或新开标签页,无需额外按钮逻辑。
核心参数
| 参数 | 说明 |
|---|---|
page |
目标:本地页面文件路径 / st.Page对象 / http/https外部链接 |
label |
链接显示文字,外部链接必填 |
icon |
链接前置图标 |
disabled |
是否禁用该跳转链接 |
use_container_width |
链接宽度填满父容器 |
代码示例
python
import streamlit as st
# 跳转内部页面
st.page_link("dashboard.py", label="返回首页", icon="🏠")
# 跳转外部网页
st.page_link("https://www.baidu.com", label="打开百度", icon="🌐")
# 禁用的页面链接
st.page_link("analysis.py", label="数据分析(维护中)", disabled=True)

4. st.switch_page:代码编程式强制切换页面
功能说明
代码内触发页面跳转,常用于按钮点击、表单提交、登录成功等场景,执行后立刻终止当前页面代码,加载目标页面,纯逻辑驱动无UI展示。
核心参数
page:目标页面的相对文件路径,或预先定义的st.Page对象
代码示例
python
import streamlit as st
# 点击按钮自动跳转到首页
if st.button("回到首页"):
st.switch_page("main.py")
# 表单提交后跳转数据页
submit = st.form_submit_button("开始分析")
if submit:
st.switch_page("pages/data_analysis.py")