python-3.x 具有多个页面和“返回主页”按钮的streamlit Web应用程序

holgip5t  于 2023-05-30  发布在  Python
关注(0)|答案(1)|浏览(177)

我有一个streamlit web应用程序,它有四个导航单选按钮。我想要的应用程序是显示所有的导航按钮时,只有主页按钮被选中。如果选择了其他按钮,则侧边栏应仅显示一个带有文本“返回主页”的按钮。下面是我使用的代码:

import streamlit as st

## Home Page  
    
rad = st.sidebar.radio("Navigation", ['Home','Summary', 'Twitter','Facebook'])

if rad == 'Home':   
   st.title('Sidebar should show all navigation buttons from the list above')

if rad == 'Summary':
    st.title('Sidebar should only show backhome button')

if rad == 'Twitter':
    st.title('Sidebar should only show backhome button')

if rad == 'Facebook':
    st.title('Sidebar should only show backhome button')
kgsdhlau

kgsdhlau1#

对于像您这样的模拟多页结构,您需要在会话状态中创建一个值来保存您所处的页面。然后,根据该值,您可以显示相应的导航。使用这些导航小部件的回调函数修改会话状态下保存的页面。

import streamlit as st

if 'page' not in st.session_state:
    st.session_state.page = 'Home'

def set_page():
    st.session_state.page = st.session_state.nav

def home():
    st.session_state.page = 'Home'

if st.session_state.page == 'Home':
    st.sidebar.radio(
        "Navigation",
        ['Home','Summary', 'Twitter','Facebook'], 
        key='nav',
        on_change=set_page
    )
else:
    st.sidebar.button('Back to Home', on_click=home)

match st.session_state.page:
    case 'Home':
        st.title('Home')
    case 'Summary':
        st.title('Summary')
    case 'Twitter':
        st.title('Twitter')
    case 'Facebook':
        st.title('Facebook')

相关问题