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

如何基于JSON动态创建Streamlit表单与仪表盘?

基于JSON动态创建Streamlit仪表盘与表单

完全可以通过JSON数据动态生成Streamlit仪表盘和表单,你的代码出错是因为几个具体的使用问题,下面是问题分析和修正方案:

原代码的问题点

  • 组件嵌套错误:在st.text_input的label参数中使用st.title()是错误的,label需要传入字符串,不能嵌套Streamlit的组件调用
  • 表单缺少提交按钮:Streamlit的表单必须包含form.form_submit_button()才能正常触发提交逻辑
  • 表单Key重复:循环中表单的key固定为"form_one",如果后续有多个task,会出现组件key重复的报错,应该使用动态key
  • 字段拼写问题:JSON里的"Sol d"应为笔误(比如应为"Solute"),会导致输入框显示异常

修正后的代码

import streamlit as st
import json

JSON_FILE = '''{
    "project": "Prediction",
    "tasks": [
        {
            "name":"Prediction Dashboard",
            "inputs": "Solute", 
            "inputs_two":"Solvent",
            
            "desc":{
                "Solute_Smile": "Solute Sequence",
                "Solvent_smile": "Solvent Sequence",
                "Probability_Score": "(in Kcal/mol) :"
            }
        }
    ]
}'''

def load_data(data):
    return json.loads(data)

data = load_data(JSON_FILE)

# 遍历tasks动态生成仪表盘内容
for idx, task in enumerate(data['tasks']):
    # 生成任务标题
    st.title(task['name'])
    
    # 创建表单,使用动态key避免重复
    with st.form(key=f"task_form_{idx}"):
        # 生成输入框,直接用字符串作为label,利用desc字段添加提示
        solute_input = st.text_input(label=task['inputs'], help=task['desc']['Solute_Smile'])
        solvent_input = st.text_input(label=task['inputs_two'], help=task['desc']['Solvent_smile'])
        
        # 添加表单提交按钮
        submit_btn = st.form_submit_button(label="执行预测")
        
        # 提交后处理逻辑
        if submit_btn:
            st.write(f"输入的溶质序列: {solute_input}")
            st.write(f"输入的溶剂序列: {solvent_input}")
            # 这里可替换为实际预测逻辑,比如调用模型计算得分
            st.success(f"预测完成,概率得分: **XX Kcal/mol**")

代码说明

  • 使用enumerate遍历tasks,同时获取索引生成动态表单key,避免重复报错
  • 输入框的help参数复用JSON里的desc字段,给用户提供输入提示
  • 表单提交后可基于JSON配置的字段,动态执行后续业务逻辑(如预测计算)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:09:21