Streamlit中DuplicateWidgetID问题:多个st.checkbox生成键重复报错
Streamlit待办应用DuplicateWidgetID错误解决方法
开发Streamlit待办事项应用时遇到DuplicateWidgetID错误,程序提示存在多个具有相同生成键的st.checkbox组件。
原代码
import streamlit as st import functions list = functions.get_list() def add_todo(): todo = st.session_state["new_todo"] + "\n" list.append(todo) functions.write_list(list) st.title("Simple To-Do app") st.subheader("This is my todo app") st.write("Increase your productivity") for todo in list: st.checkbox(todo) st.text_input(label = "", placeholder = "Add a new todo...", on_change=add_todo, key = 'new_todo')
错误原因
Streamlit会根据组件的渲染结构自动分配内部唯一键,当循环生成多个结构完全一致的st.checkbox时,这些组件的内部键会重复,从而触发DuplicateWidgetID错误。
修复方案
给每个st.checkbox传递唯一的key参数,确保每个组件的键不重复。推荐使用列表索引作为key(即使待办内容重复也能保证唯一性),修改循环部分代码即可:
for index, todo in enumerate(list): st.checkbox(todo, key=f"todo_{index}")
如果你的待办列表中每个内容本身都是唯一的,也可以直接用待办内容作为key:
for todo in list: st.checkbox(todo, key=todo)
报错回溯
File "C:\Users\seraf\Desktop\Final project\web.py", line 17, in <module> st.checkbox(todo)
内容的提问来源于stack exchange,提问作者Sherif98
相关产品推荐
相关产品推荐

