streamlit学习笔记九-----streamlit新版支持原生多页面二

本文介绍 st.Page 与 st.navigation方法结合,这个方法复杂但灵活,首先推荐

1
2
$ pip install streamlit --upgrade #先升级到最新版 streamlit

假设主页面的文档main_page.py如下:

1
2
3
4
5
6
7
8
import streamlit as st

def page_2():
st.title("页面三测试")

pg = st.navigation([st.Page("test1.py"), st.Page("test2.py"),st.Page(page_2,title="这个页面是个函数") ],position="sidebar")
pg.run()

另两个页而的文件 test1.py与test2.py与main_page.py在同一个目录下,不用另建目录。

  1. 这里先用st.Page声明了页面
    st.Page(
    pages, # 如果是字符串,就是声明的页面目录+文件名; 也可以是本页内定仪的一个函数
    title, # 页面标题,可以不用
    icon, # 页面图标,特殊字符串,也可以不用
    url_path, # 就是页面是一个www.**.时用
    default, # True,则页面不是一个web, 可以不用
    )
  2. 再把st.Page声明的页面传送到st.navigation([st.Page(“test1.py”),st.Page(“test2.py”),st.Page(test_3函数),st.Page(“test4.py”),…..])中,以便在.run时过行。
    st.navigation(
    pages, # 是一个列表或字典
    position, # 没有声明就是=“sidebar”,表示导航在侧边栏中,如果=“hidden”,则隐藏导航栏
    expanded, # False,如果菜单多了,可以折叠; True,不折叠菜单
    )

上面的例了中,pages是一个列表,如果要对页而进行分类,则可以用字典,便如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import streamlit as st

def page_1():
st.title("页面三测试")

def page_2():
st.title("页面四测试")

pages = {
"测试页面": [
st.Page("test2.py", title="这个是测试文件2"),
st.Page("test3.py", title="这个是测试文件3"),
],
"测试函数": [
st.Page(page_2, title="测试函数2"),
st.Page(page_1, title="测试函数1"),
],
}

pg = st.navigation(pages)
pg.run()