请教大神,为什么我写的代码,无法修改expander中的内容

请教大神帮助,谢谢

代码运行后,点击“查询”按钮,新增2个expander,但是进入expander
1,点击“年龄”选择,expander会自动关闭。
2,修改“姓名”,点击"提交",expander还是会关闭。

希望可以修改内容,并保存成功

代码如下:

import streamlit as st

def get_data():
with st.expander(“查询用户信息”):
operation = st.button(“查询”, key=“modify_button1”)
if operation:
search_person = [{‘person_id’: ‘123456’, ‘name’: ‘mary’, ‘age’: 18},
{‘person_id’: ‘789012’, ‘name’: ‘tom’, ‘age’: 50}]
return search_person

data = get_data()
if data:
for search_person in data:
k = str(search_person[“person_id”])
with st.expander(search_person[“name”]):
name = st.text_input(label=‘姓名 :’, value=search_person.get(“name”), key=“add_name” + k)
age = st.slider(label=‘年龄 :’, value=search_person.get(“age”), key=“add_age” + k)
sub = st.button(“提交”, key=“submit” + k)
if sub:
fix_person = {
“name”: name,
“age”: age
}

            st.write(fix_person)

Hello。
这个是因为组件的值变动会让整个程序都重新运行一遍。所以expander就会回到最开始的关闭状态。
推荐用 st.form 来解决这个问题。
我修改了一下你的代码如下,给你参考:

import streamlit as st


def get_data():
    with st.expander("查询用户信息"):
        operation = st.button("查询", key="modify_button1")
        if operation:
            search_person = [{'person_id': '123456', 'name': 'mary', 'age': 18},
                             {'person_id': '789012', 'name': 'tom', 'age': 50}]
            return search_person


data = get_data()
if data:
    for search_person in data:
        k = str(search_person["person_id"])
        with st.expander(search_person["name"]):
            form = st.form(key=search_person["name"])
            
            name = form.text_input(label='姓名 :', value=search_person.get(
                "name"), key="add_name" + k)

            age = form.slider(label='年龄 :', value=search_person.get(
                "age"), key="add_age" + k)

            sub = form.form_submit_button("提交")
            if sub:
                fix_person = {
                    "name": name,
                    "age": age
                }

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.