首页 > Python资料 博客日记
『玩转Streamlit』--多页应用
2024-10-25 12:30:02Python资料围观36次
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.py
和common.py
不是必需的,当应用的session
管理变得复杂,或者共通函数比较多时才需要单独用文件管理。
对于简单的多页面应用,一般只需要上面的app.py
,page1.py
和page2.py
就够了。
2. 多页应用的导航
在Streamlit
中,使用st.navigation
,可以帮助我们轻松地创建动态导航菜单。
比如,以app.py
,page1.py
和page2.py
为例,创建一个多页面应用。
# app.py
import streamlit as st
page1 = st.Page("pages/page1.py", title="页面1")
page2 = st.Page("pages/page2.py", title="页面2")
pg = st.navigation([page1, page2])
pg.run()
# page1.py
import streamlit as st
st.header("这是页面 1")
# page2.py
import streamlit as st
st.header("这是页面 2")
通过streamlit run app.py
启动之后,一个带有导航的简单多页面应用就完成了。
通过侧边栏中的菜单,可以自由切换页面。
除了通过app.py
生成的菜单来切换页面,Streamlit
中还提供了st.switch_page
方法,
可以在一个页面中导航到其他页面。
比如,可以在page1.py
和page2.py
中添加一个互相导航的按钮。
# page1.py
import streamlit as st
st.header("这是页面 1")
if st.button("GoTo Page 2"):
st.switch_page("pages/page2.py")
# page2.py
import streamlit as st
st.header("这是页面 2")
if st.button("GoTo Page 1"):
st.switch_page("pages/page1.py")
3. 多页之间共享数据
最后,介绍下如何在不同的页面直接共享数据,这样就可以让不同页面的功能联动起来。
Streamlit多页面之间共享数据有几个方案可以实现,
第一个方案是使用全局变量,
但是这种方法存在一些问题,比如如并发访问时的数据不一致性和难以调试等。
因此,一般不推荐使用全局变量来共享数据。
第二个方案是使用外部存储,比如将共享的数据保存在文件或者数据库中,这种方案适用于需要比较大型的应用,或者需要持久化存储的应用场景。
如果你的应用规模不大,并且不需要持久化存储,那么用这个方案显得有些笨重。
最后一个方案就是Session State
,这是Streamlit
提供的一种机制,特别适合在不同页面之间传递和保存状态数据。
下面构造一个模拟的示例,演示如何在不同的页面间共享数据。
首先在page1.py
中,我们可以选择数据集,
然后在page2.py
中,会自动根据我们选择的数据集开始分析。
# page1.py
import streamlit as st
st.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.dataset
option = 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.py
import streamlit as st
st.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
中读取数据集的名称。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj