我有一个Streamlight表单,它接受st.inputText小部件中的用户输入.但是,每次我单击提交时,表单都会刷新,并且在实现提交逻辑之前,所有输入都会丢失.

因此,从来没有任何东西提交给我的谷歌工作表.

with st.form(key="payments"):

    st.markdown(
        "**Hi foo, please choose the month and year for which you are entering data**")

    month, year = st.columns(2)

    with month:
        selected_month = st.selectbox("Month", months)

    with year:
        selected_year = st.selectbox("Year", years)

    status, name_column, amount = st.columns(3)

    
    name_column.markdown("_Name_")
    amount.markdown("_Amount (ugx)_")

    name_input = dict()
    input_amounts = dict()

    for name in names:

        amount_key = str(fx.create_guid())

        name_input[name] = amount_key

        with name_column:
            st.write(name)
            st.write("")
        with amount:
            input_amounts[amount_key] = st.text_input(
                placeholder="ugx", label=" ", label_visibility="collapsed", disabled=False, key=amount_key)

    submitted = st.form_submit_button("Save")
    
    if submitted:
    
       'Open google sheet'
    
        for k, v in name_input.items():
    
            amount_entered = input_amounts[v]
    
            if amount_entered.strip() != "" and int(amount_entered) > 0:
              
                all_values = worksheet.get_all_values()
                next_row_index = len(all_values) + 1
    
               # data to insert
                data = [selected_month, k, amount_entered, selected_year]
    
                print(data)
    
                # insert data in the next row
                worksheet.append_row(
                    data,
                    value_input_option='user_entered',
                    insert_data_option='insert_rows',
                    table_range= #table_range)

但是,当我为st.inputText小部件设置一个缺省值时,插入就可以了.

推荐答案

我发现了问题所在.这从来不是一种令人耳目一新的形式.

不需要使用INPUT_AMOUNTS字典存储不同输入框的值.当表单加载时,它会加载空白值,而在用户单击提交后,这些空白值永远不会更新.

相反,我只是利用输入框的键,并使用会话状态来检索输入的值.这如下面更正后的代码所示;

with st.form(key="payments"):

st.markdown("**Hi foo, please choose the month and year for which you are entering data**")

month, year = st.columns(2)

with month:
    selected_month = st.selectbox("Month", months)

with year:
    selected_year = st.selectbox("Year", years)

st.write("---")

st.markdown("**Member payments**")

name_column, amount = st.columns(2)

name_column.markdown("_Name_")
amount.markdown("_Amount (ugx)_")

name_input = dict()

counter = 1

for name in names:

    amount_key = f"key{counter}"

    name_input[name] = amount_key

    with name_column:
        st.write(name)
        st.write("")
    with amount:
            st.text_input(
            placeholder="ugx", 
            label=" ", 
            label_visibility="collapsed", 
            disabled=False, 
            key=amount_key)
            
    counter += 1

submitted = st.form_submit_button("Save")

if submitted:
    
    payments_for_insertion=[]
   
    for name, amount_key in name_input.items():
        
        amount_entered = st.session_state.get(amount_key,"")

        if amount_entered.strip() != "" and int(amount_entered) > 0:
            
            data = [selected_month, name, amount_entered, selected_year]

            payments_for_insertion.append(data)

    if payments_for_insertion:
            
        'Open Worksheet'

        all_values = worksheet.get_all_values()
    
        next_row_index = len(all_values) + 1

        worksheet.append_rows(
                payments_for_insertion,
                value_input_option='user_entered',
                insert_data_option='insert_rows',
                table_range='your table_range'"
            )

Python相关问答推荐

使用SKLearn KMeans和外部生成的相关矩阵

在for循环中保存和删除收件箱

OdooElectron 商务产品详情页面中add_qty参数动态更新

Python在通过Inbox调用时给出不同的响应

为什么我的(工作)代码(生成交互式情节)在将其放入函数中时不再工作?

如何使用bs 4从元素中提取文本

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

opencv Python稳定的图标识别

从DataFrame.apply创建DataFrame

如何使用Jinja语法在HTML中重定向期间传递变量?

如何将ctyles.POINTER(ctyles.c_float)转换为int?

连接两个具有不同标题的收件箱

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

在Python中管理打开对话框

如何在WSL2中更新Python到最新版本(3.12.2)?

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

为什么Django管理页面和我的页面的其他CSS文件和图片都找不到?'

如何从需要点击/切换的网页中提取表格?

dask无groupby(ddf. agg([min,max])?''''

numpy.unique如何消除重复列?