Streamlit多页面管理如何实现?老版本与新版方案的差异是什么?

streamlit是一个用于快速构建web可化化界面的python库,主要可以用于快速验证算法或者模型的效果,也可以用来给内部的第三者提供一些方便的小工具,但是当工具变多时,如果一个工具启动一个全局实例,会导致后期维护麻烦,所以一般采用左侧定义目录菜单,然后根据菜单跳转到对应页面。

如何有效解决Streamlit多页面管理问题

老版本实现方案

在最初的几个版本之前,streamlit 使用了一种特殊的方式实现了多页面,将每一个功能模块的文件分别放入pages目录下,然后将文件名命名为 序号_icon_目录名.py 的格式,框架会自动进行解析。

目录的示例如下:

app.py  # 这是你用 "streamlit run" 命令来运行的文件
└─── pages/  # 这是存放其他页面文件的目录
  └─── 1_test1.py # 这是一个页面
  └─── 2_😊_test2.py # 这是第二个页面
Streamlit多页面管理如何实现?老版本与新版方案的差异是什么?

优缺点:使用方式简单,但是自定义比较差,还不能实现工具分组

新版推荐方案

在新版本的框架中,加入了 navigation 和 Page 这两个功能,通过进行组合,可以实现自定义的左侧目录,navigation方法的定义如下:

def navigation(
    pages: list[StreamlitPage] | dict[SectionHeader, list[StreamlitPage]],
    *,
    position: Literal["sidebar", "hidden"] = "sidebar",
) -> StreamlitPage:

支持传入一个StreamlitPage 或者 一个 字典类型,如果传入数组类型,将直接进行渲染,如果传入字典,将根据字典中的分组进行渲染。

1、仅渲染一级菜单

在app.py中写入下面部分内容import streamlit as st ng = st.navigation([ st.Page('pages1/1_test1.py'), st.Page('pages1/2_test2.py'),] ) ng.run()

将上面的pages目录名改为pages1目录,实现效果如下:

Streamlit多页面管理如何实现?老版本与新版方案的差异是什么?

2、二级菜单

修改上面app.py中的代码如下

import streamlit as st
ng = st.navigation(
    {
        "分类1": [st.Page('pages1/1_test1.py')],
        "分类2": [st.Page('pages1/2_test2.py')],
    }
)
ng.run()

实现效果如下:

Streamlit多页面管理如何实现?老版本与新版方案的差异是什么?

总结

Streamlit 使用过程中对于较为复杂的场景使用还是有一定难度,但是官方也在不断的更新,添加更多的新功能,同时还有大量的社区插件支持,会越来越方便大家的使用。

Streamlit 作为一个强大且易用的 Python 库,在快速构建 Web 可视化界面、验证算法和模型效果方面,提供了极大的便利。通过最新的多页面导航功能,Streamlit 进一步提升了工具的组织性和可维护性,使得在复杂场景下的应用变得更加灵活和高效。虽然在某些复杂使用场景中可能仍有一定难度,但随着官方的持续更新和社区插件的不断丰富,Streamlit 将为用户带来更多功能和便利,逐步成为数据科学家和开发者不可或缺的工具之一。

延展阅读:

如何使用Ollama与AnythingLLM零成本搭建本地知识库?

淘宝京东晚上店铺的转化率总是很低?这几个方法教你如何提高

淘宝京东电商客服如何更好地催单、跟单提升询单转化率和顾客体验?

咨询方案 获取更多方案详情                        
(2)
研发专家-江山研发专家-江山
上一篇 2024年9月21日 上午11:00
下一篇 2024年9月23日 下午10:29

相关推荐