- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
Streamlit不仅让创建单页应用变得易如反掌,更通过一系列创新特性,支持构建多页面应用,极大地丰富了用户体验和数据探索的可能性.
随着我们Streamlit App的功能逐渐增多之后,单个页面展示过多信息,使用不便, 。
通过多页面可以将功能相关的部分组织在一起,形成逻辑清晰的多个页面,使用户能够轻松地与不同的功能模块进行交互.
从代码方面来看,多页面应用将不同的功能模块拆分成独立的页面,每个页面可以有自己的代码逻辑和数据流.
这有助于实现代码的模块化,使代码结构更加清晰、易于管理.
从运行性能上来看,多页面应用可以加快页面的加载速度,因为用户只需加载当前所需页面的内容,而无需加载整个应用的全部内容.
此外,对于复杂的应用来说,多页面应用更容易实现功能的迭代和扩展.
随着应用的发展,可以逐步添加新的页面和功能模块,而无需对现有页面进行大规模修改.
本篇主要介绍构建一个Streamlit的多页面应用需要掌握的基本知识.
在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就够了.
在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")
最后,介绍下如何在不同的页面直接共享数据,这样就可以让不同页面的功能联动起来.
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中读取数据集的名称.
最后此篇关于『玩转Streamlit』--多页应用的文章就讲到这里了,如果你想了解更多关于『玩转Streamlit』--多页应用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
当我尝试将 streamlit 部署到 heroku 时,出现以下错误。我该如何解决? 没有名为 streamlit.main 的模块; ‘streamlit’是一个包,不能直接执行 最佳答案 我试过
我正在使用带有 streamlit 的简单 ML 模型。它在 conda 环境中的本地机器上运行良好,但当我尝试将其部署到 share.streamlit.io 时,它显示错误安装要求。 错误信息如下
我想使用 docker 来容器化 nginx、fastapi 和 2 个 streamlit 应用程序。所有 3 个应用程序(fastapi、2streamlit 应用程序)都不会相互交互。 Ngin
Is there a way in Streamlit to:Streamlight中是否有方法: Select text in a text area选择文本区域中的文本 Cl
我正在尝试从同一目录中的本地系统上传图像。上传后,当我通过打开的 cv 拆分和合并 b、g 和 r 颜色时,我收到错误 ValueError:没有足够的值来解压(预期 3,得到 0) 错误: 这是显示
我想创建一个简单的流线型应用程序,当您按下按钮时,它会增加 x 并显示 x 的新值。 但是,它仅适用于第一次“x 仅显示值 2 且不增加” import streamlit as st x = 1 i
我一直在尝试使用 streamlit 创建一个网络仪表板。运行一个片段后的错误是,“There are multiple identical st.button widgets with the sa
我使用 2 个不同的 radio 选项来执行不同的任务。我想从一捕获图像,然后稍后在选项 2 中执行一些操作。当我在 my_image(在选项 1 中)中存储一帧后尝试将单选选项更改为 2 时,出现s
有谁知道我是否可以使用 streamlit_chat 消息在 Streamlit 中显示类似 chatgpt 的流响应? 我需要类似 message(streaming=True) 或任何其他替代方案
已关闭。这个问题是 not about programming or software development 。目前不接受答案。 这个问题似乎不是关于 a specific programming
有谁知道我是否可以使用 streamlit_chat 消息在 Streamlit 中显示类似 chatgpt 的流响应? 我需要类似 message(streaming=True) 或任何其他替代方案
已关闭。这个问题是 not about programming or software development 。目前不接受答案。 这个问题似乎不是关于 a specific programming
我正在用子图绘制图像,它在 Jupyter(或“纯 python”)和 Streamlit 中看起来不同。 例如,如果我有一个只有1 张图像 的(2 x 2) 子图,它将在 Streamlit 中被拉
嗨,过去几天我一直在尝试在 azure 中部署 Streamlit 应用程序。一个简单的应用程序,例如 import streamlit as st def main(): st.wr
我是 Streamlit 的新手。我想进行多项选择用户输入(复选框)。但我想从 4 个选项中最多选择 3 个选项。 我已经尝试过 multiselect 的下拉功能. import streamlit
我的应用程序中有一个按钮,我想在用户单击它时设置它的样式。问题在于,因为 Streamlit 不允许我们向我们创建的对象发布类,所以我需要找到一种方法来以稳健且与版本无关的方式指定确切的按钮。这是按钮
我正在处理一个机器学习项目,我想(相对)实时地显示具有适应度函数的图表。 我正在使用 this SO answer 中的代码只要图表显示在 matplotlib 窗口中,它就可以正常工作。一旦我将其添
我的应用程序中有一个按钮,我想在用户单击它时设置它的样式。问题在于,因为 Streamlit 不允许我们向我们创建的对象发布类,所以我需要找到一种方法来以稳健且与版本无关的方式指定确切的按钮。这是按钮
我正在尝试使用 启动 Streamlit 应用程序 import os os.popen("streamlit run stockXchange.py") 当我运行这段代码时,会出现无限多的流光窗口,
全部, 我以前成功使用过多选,但是当我尝试这个我作为 POC 尝试的特定示例时,行为非常奇怪。本质上,我想要做的是使用多选让应用程序在中间步骤等待用户输入。但是,multiselect 不会等我选择我
我是一名优秀的程序员,十分优秀!