如何在Streamlit中通过按钮跳转至另一个Python文件页面
Streamlit 实现页面跳转至其他Python文件的方案
Streamlit 本身是单页应用框架,但可以通过以下几种方式实现点击按钮或表单提交后跳转到其他Python文件对应的页面:
方法一:使用官方内置多页面功能(推荐)
Streamlit 1.10+ 版本支持原生多页面结构,只需按规范组织项目,就能通过 st.switch_page() 实现跳转。
步骤:
- 按如下结构组织项目:
你的项目目录/ ├── app.py # 主页面文件 └── pages/ # 存放其他页面的文件夹(必须叫pages) └── page2.py # 要跳转的目标页面文件
- 主页面(app.py)中添加按钮/表单跳转逻辑:
import streamlit as st # 普通按钮跳转 if st.button("跳转到第二个页面"): st.switch_page("pages/page2.py") # 路径对应目标文件位置 # 表单提交跳转 with st.form("提交表单"): st.text_input("请输入内容") submit_status = st.form_submit_button("提交并跳转") if submit_status: st.switch_page("pages/page2.py")
- 目标页面(pages/page2.py)编写常规Streamlit代码:
import streamlit as st st.title("这是第二个页面") st.write("成功跳转!") # 可选:添加返回主页面的按钮 if st.button("返回主页面"): st.switch_page("app.py")
方法二:通过Session State控制页面切换(无需官方多页面结构)
如果不想使用官方多页面目录,可借助 st.session_state 存储当前页面状态,通过变量切换加载不同页面的内容。
步骤:
- 项目结构:
你的项目目录/ ├── app.py # 入口文件 └── page2.py # 目标页面的逻辑文件
- 入口文件(app.py):
import streamlit as st from page2 import render_page2 # 导入目标页面的渲染函数 # 初始化页面状态 if "current_page" not in st.session_state: st.session_state.current_page = "main" # 根据状态渲染对应页面 if st.session_state.current_page == "main": st.title("主页面") # 普通按钮跳转 if st.button("跳转到Page2"): st.session_state.current_page = "page2" st.rerun() # 强制页面重新渲染 # 表单提交跳转 with st.form("提交表单"): st.text_input("填写信息") if st.form_submit_button("提交并跳转"): st.session_state.current_page = "page2" st.rerun() elif st.session_state.current_page == "page2": render_page2()
- 目标页面文件(page2.py):
import streamlit as st def render_page2(): st.title("Page2") st.write("通过Session State切换的页面") # 返回主页面 if st.button("返回主页面"): st.session_state.current_page = "main" st.rerun()
注意事项:
- 使用
st.switch_page()前确保Streamlit版本≥1.10,可通过pip install --upgrade streamlit升级。 st.switch_page()的路径需相对于项目根目录,若目标文件在子文件夹中要写全路径。- 表单提交后页面会自动重新渲染,因此判断提交状态后执行跳转逻辑即可生效。
内容的提问来源于stack exchange,提问作者Mazen Saie
相关产品推荐
相关产品推荐

