You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Streamlit中通过按钮或超链接实现标签页间跳转?

Streamlit标签页间跳转解决方案

问题说明

你之前用的st.change_page是用于**多页面应用(不同.py文件)**的跳转,不适用于单页面内的st.tabs标签页;而st.button本身没有page参数,所以这两种写法都无效。下面提供两种可行的实现方式:


方法一:原生Streamlit按钮跳转(依赖会话状态)

通过st.session_state记录当前激活的标签页索引,点击按钮时修改索引并触发页面重跑,实现标签页切换。

import streamlit as st

# 初始化会话状态:记录当前激活的标签页索引
if "active_tab" not in st.session_state:
    # 默认选中第一个标签页,根据你的实际标签顺序调整初始索引
    st.session_state.active_tab = 0

# 定义所有标签页名称
tab_names = [
    "首页",
    "Diabetes Prediction(糖尿病预测)",
    "高血压预测",
    "心脏病预测",
    "肝病预测",
    "肾病预测"
]

# 创建标签页容器
tabs = st.tabs(tab_names)

# 在任意需要添加跳转按钮的标签页中编写代码(示例:首页标签页)
with tabs[0]:
    st.title("多疾病预测系统")
    # 添加跳转按钮
    if st.button("点击此处跳转到糖尿病预测标签页"):
        # 修改会话状态为目标标签页的索引
        target_index = tab_names.index("Diabetes Prediction(糖尿病预测)")
        st.session_state.active_tab = target_index
        # 触发页面重跑,立即切换标签
        st.rerun()

# 根据会话状态渲染对应标签页的内容
with tabs[st.session_state.active_tab]:
    if st.session_state.active_tab == tab_names.index("Diabetes Prediction(糖尿病预测)"):
        st.title("糖尿病预测")
        # 这里编写糖尿病预测的业务代码
        st.write("请输入患者信息进行预测...")
    elif st.session_state.active_tab == 0:
        st.write("欢迎使用多疾病预测系统,请选择对应标签页开始检测")
    # ...其他标签页逻辑可按需补充

方法二:HTML超链接跳转(无页面重跑)

通过HTML结合JavaScript直接操作Streamlit标签页的DOM元素,实现无刷新跳转,体验更流畅,但依赖Streamlit的DOM结构(若官方更新标签页的测试ID可能失效)。

import streamlit as st

# 创建标签页
tabs = st.tabs([
    "首页",
    "Diabetes Prediction(糖尿病预测)",
    "高血压预测",
    "心脏病预测",
    "肝病预测",
    "肾病预测"
])

# 在需要添加超链接的标签页中(示例:首页标签页)
with tabs[0]:
    st.title("多疾病预测系统")
    # 生成跳转超链接,注意修改索引为目标标签页的位置(从0开始计数)
    target_tab_index = 1  # 糖尿病预测是第二个标签页,索引为1
    st.markdown(
        f'<a href="javascript:void(0);" onclick="document.querySelectorAll(\'button[data-testid=\"stTab\"]\')[{target_tab_index}].click();" style="color: blue; text-decoration: underline;">点击此处跳转到糖尿病预测标签页</a>',
        unsafe_allow_html=True
    )

# 糖尿病预测标签页内容
with tabs[1]:
    st.title("Diabetes Prediction(糖尿病预测)")
    st.write("请输入患者信息进行预测...")

内容的提问来源于stack exchange,提问作者Gor Ge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:10:14