『玩转Streamlit』--多页应用

news/2025/3/20 13:40:53/文章来源:https://www.cnblogs.com/wang_yb/p/18502232

Streamlit不仅让创建单页应用变得易如反掌,更通过一系列创新特性,支持构建多页面应用,极大地丰富了用户体验和数据探索的可能性。

随着我们Streamlit App的功能逐渐增多之后,单个页面展示过多信息,使用不便,

通过多页面可以将功能相关的部分组织在一起,形成逻辑清晰的多个页面,使用户能够轻松地与不同的功能模块进行交互。

从代码方面来看,多页面应用将不同的功能模块拆分成独立的页面,每个页面可以有自己的代码逻辑和数据流。

这有助于实现代码的模块化,使代码结构更加清晰、易于管理。

从运行性能上来看,多页面应用可以加快页面的加载速度,因为用户只需加载当前所需页面的内容,而无需加载整个应用的全部内容。

此外,对于复杂的应用来说,多页面应用更容易实现功能的迭代和扩展。

随着应用的发展,可以逐步添加新的页面和功能模块,而无需对现有页面进行大规模修改。

本篇主要介绍构建一个Streamlit的多页面应用需要掌握的基本知识。

1. 多页应用的文件结构

Streamlit多页面应用中,文件和文件夹的布局对于项目的组织、管理和维护至关重要。

下面是一个推荐的布局方式:

my_app/  
├── app.py  # 主应用文件,负责启动应用和配置路由
├── pages/  
│   ├── __init__.py  # 可选,用于将pages文件夹作为Python包处理  
│   ├── page1.py  
│   ├── page2.py  
│   └── ...  # 其他页面文件  
├── session_state.py  # Session State管理类文件
└── common.py  # 共通函数

扩展功能时,在pages文件夹下添加新的py文件即可。

其中session_state.pycommon.py不是必需的,当应用的session管理变得复杂,或者共通函数比较多时才需要单独用文件管理。

对于简单的多页面应用,一般只需要上面的app.pypage1.pypage2.py就够了。

2. 多页应用的导航

Streamlit中,使用st.navigation,可以帮助我们轻松地创建动态导航菜单。

比如,以app.pypage1.pypage2.py为例,创建一个多页面应用。

# app.pyimport streamlit as stpage1 = st.Page("pages/page1.py", title="页面1")
page2 = st.Page("pages/page2.py", title="页面2")pg = st.navigation([page1, page2])
pg.run()
# page1.pyimport streamlit as stst.header("这是页面 1")
# page2.pyimport streamlit as stst.header("这是页面 2")

通过streamlit run app.py 启动之后,一个带有导航的简单多页面应用就完成了。

通过侧边栏中的菜单,可以自由切换页面。

除了通过app.py生成的菜单来切换页面,Streamlit中还提供了st.switch_page方法,

可以在一个页面中导航到其他页面。

比如,可以在page1.pypage2.py中添加一个互相导航的按钮。

# page1.pyimport streamlit as stst.header("这是页面 1")if st.button("GoTo Page 2"):st.switch_page("pages/page2.py")
# page2.pyimport streamlit as stst.header("这是页面 2")if st.button("GoTo Page 1"):st.switch_page("pages/page1.py")

3. 多页之间共享数据

最后,介绍下如何在不同的页面直接共享数据,这样就可以让不同页面的功能联动起来。

Streamlit多页面之间共享数据有几个方案可以实现,

第一个方案是使用全局变量

但是这种方法存在一些问题,比如如并发访问时的数据不一致性和难以调试等。

因此,一般不推荐使用全局变量来共享数据。

第二个方案是使用外部存储,比如将共享的数据保存在文件或者数据库中,这种方案适用于需要比较大型的应用,或者需要持久化存储的应用场景。

如果你的应用规模不大,并且不需要持久化存储,那么用这个方案显得有些笨重。

最后一个方案就是Session State,这是Streamlit提供的一种机制,特别适合在不同页面之间传递和保存状态数据。

下面构造一个模拟的示例,演示如何在不同的页面间共享数据。

首先在page1.py中,我们可以选择数据集,

然后在page2.py中,会自动根据我们选择的数据集开始分析。

# page1.pyimport streamlit as stst.header("这是页面 1")if st.button("GoTo Page 2"):st.switch_page("pages/page2.py")datalist = ("", "人口数据", "环境数据", "交易数据")if "dataset" not in st.session_state:option = st.selectbox("请选择数据集",datalist,)
else:option = st.session_state.datasetoption = st.selectbox("请选择数据集",datalist,index=datalist.index(option),)if option == "":st.write("当前尚未选择数据集")
else:st.write("你当前选择的是: 【", option, "】")st.session_state.dataset = option

page1.py中将选择数据集名称保存到Session State中。

# page2.pyimport streamlit as stst.header("这是页面 2")if st.button("GoTo Page 1"):st.switch_page("pages/page1.py")if "dataset" not in st.session_state or st.session_state.dataset == "":st.write("当前尚未选择数据集")
else:st.write("开始分析数据集: 【", st.session_state.dataset, "】")

page2.py直接从Session State中读取数据集的名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/821639.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

触觉智能赴南方科技大学进行Purple Pi OH开源鸿蒙开发板培训圆满完成!

2024年10月19日,触觉智能科技有限公司在南方科技大学成功举办了一场别开生面的OpenHarmony开发板培训活动。校企联合教学,促进了教育与产业的紧密结合,通过引入企业的实际案例和经验,使教学内容更加贴近实际需求。作为开源鸿蒙硬件方案领跑者,深圳触觉智能将不遗余力、持续…

直播系统使用什么语言编写的

编写直播系统主要会用到以下四种语言:一、Java;二、Python;三、C++;四、Golang。Java作为一种功能强大且稳定的编程语言,在直播系统的开发中占据着重要地位,它通常用于处理后端逻辑、数据存储、业务逻辑的实现、视频编解码等关键部分。一、Java Java作为一种广泛应用于软…

案例分析——HyperWorks练习做模型简化

Step 01:载入模型 Exercise_2b.hm。图 2-20 Exercise_2b 模型alt="Exercise_2b 模型"Step 02:去除曲边导角。 (1) 进入 defeature 面板。 (2) 进入 edge fillets 子面板。 (3) 选择图形区所有显示曲面。 (4) 在 min radius 栏输入 1。 (5) 在 max radius 栏输入 20…

团队作业2-《需求规格说明书》

这个作业属于哪个课程 广工计院计科34班软工这个作业要求在哪里 作业要求这个作业的目标 小飞棍团队开会确定最终选题并通过需求分析制定需求规格说明书,建立和初步熟悉团队git协助方式一、团队简介队名:小飞棍队团队成员:罗振烘(组长) 3122004748庄崇立 3122004633李响 3…

用于数据挖掘的分类算法有哪些

数据挖掘的分类算法是一类用于识别和预测类别的算法,主要包括:1. 决策树,如C4.5和CART,适用于可解释性强的场景;2. SVM(支持向量机),适合线性和非线性分类问题;3. 随机森林,集成多个决策树以提高准确性;4. K-近邻算法,基于相似性进行分类。其中,随机森林以其出色的…

智能化合规审查,助力信息技术行业合同管理 | 思通数科大模型合同审查解决方案

信息技术行业因其快速发展的特性,面临着高度复杂的合同管理需求。产品种类繁多、上下游供应链环节复杂、合同内容参数繁琐。尤其是在涉及技术交付、数据隐私保护和知识产权的合同时,条款种类多样,条款之间的关联性较强,合同拟定和履行周期较长。该行业高度依赖精准的合同条…

ssh隧道进行web app

是的,使用SSH隧道可以通过SOCKS代理来实现在浏览器中打开网页。以下是步骤:设置SSH隧道:首先,你需要设置一个SSH动态端口转发(SOCKS代理)。这可以通过以下SSH命令完成: ssh -D 本地端口 用户名@远程服务器地址:22 #例子 ssh -D 7891 root@123.444.58.226:22这里,本地端…

数据库修复

数据库修复是指通过技术手段将损坏的数据库文件修复至可正常使用的状态的过程。以下是对数据库修复的详细解释: 一、数据库损坏的原因 数据库损坏可能由多种原因引起,包括但不限于: 服务器宕机或数据库程序异常终止,导致数据库文件未能正常关闭和保存。 内存错误或磁盘故障…

群晖存储怎么设置Rsync

服务器端设置Rsync共享 在群晖管理端启用Rsync共享新增Rsync用户客户端使用 客户端往服务器端发送文件 前面参数是本地文件夹或文件后面参数是远程的文件或文件夹# rsync -av /etc/hosts liuym@192.168.8.9::Backup/ 客户端从服务器端拉取文件 反过来即可 # rsync -av liuym@1…

中断函数里为什么不能调用printf

在中断函数中通常不建议调用printf,原因在于printf是一个复杂且可能会引发阻塞的函数。在中断处理程序中调用printf可能导致中断的再次触发,且可能会影响系统性能和实时性,以及引起竞态条件等问题。中断处理是操作系统中的关键机制,它允许硬件设备通知CPU它们需要处理事件。…

linux系统宝塔面板如何安装ssl证书

在Linux系统上使用宝塔面板安装SSL证书可以按照以下步骤进行:登录宝塔面板:打开浏览器,输入你的服务器IP地址加上端口号(默认为8888),例如 http://你的服务器IP:8888。 使用管理员账号和密码登录宝塔面板。选择网站:登录后,在左侧菜单栏中点击“网站”。 在网站列表中找…

网站修改意见文档模板?

创建一个网站修改意见文档时,可以遵循以下模板结构,以确保信息清晰、全面且易于理解: 网站修改意见文档 1. 文档基本信息文档标题: 版本号: 作者: 日期: 审核人:2. 项目概述项目名称: 项目背景: 目标用户: 主要功能:3. 修改意见概览序号 当前问题 建议改进 责任人 预计完成时…