Я хотел бы создать приложение с потоковой подсветкой, в котором пользователь вводит некоторые входные данные, и каждый раз, когда он использует кнопку form_submit_button, он будет заполнять фрейм данных строка за строкой для сбора пользовательских данных. В настоящее время у меня есть следующее приложение:
import streamlit as st
import pandas as pd
import numpy as np
# page
st.sidebar.header("Submit results")
with st.form('Form1'):
option = st.selectbox(
"Select the tracked you played:",
("ds Mario Kart", "Toad Harbour", "Koopa Cape"))
number = st.slider("Pick a number", 1, 12)
submitted1 = st.form_submit_button('Submit 1')
df = pd.DataFrame(np.array([[option, number]]), columns = ["Track", "Result"])
dfs = []
dfs.append(df)
df_combined = pd.concat(dfs)
st.dataframe(df_combined)
Выход:
Как вы можете видеть, он создает раскрывающийся список и ползунок. Они возвращают оба значения. Когда мы меняем значение и нажимаем кнопку отправки, значение в фрейме данных меняется. К сожалению, фрейм данных по-прежнему представляет собой только одну строку. Итак, мне было интересно, как мы можем заполнять фрейм данных строку за строкой каждый раз, когда мы нажимаем кнопку отправки?






Я адаптировал ваш код на основе этой документации. По сути, он использует session_state для запоминания данных между потоками, а также обратный вызов onAddRow, связанный с кнопкой отправки:
import pandas as pd
import streamlit as st
st.sidebar.header("Submit results")
if 'data' not in st.session_state:
st.session_state["data"] = pd.DataFrame(columns=["Track", "Result"])
def onAddRow():
row = pd.DataFrame({'Track':[st.session_state["option"]], 'Result':[st.session_state["number"]]})
st.session_state["data"] = pd.concat([st.session_state["data"], row])
with st.form('Form1'):
st.selectbox("Select track", ("ds Mario Kart", "Toad Harbour", "Koopa Cape"), key = "option")
st.slider("Pick a number", 1, 12, key = "number")
st.form_submit_button('Submit 1', on_click=onAddRow )
st.dataframe(st.session_state["data"])
Вы абсолютно правы, я не увидел проблемы. Этот вопрос должен помочь лучше объяснить. Я отредактирую свой код, используя рабочую версию.
Спасибо за ваш ответ! Это уже очень здорово. Единственное, с чем я столкнулся, это то, что вам нужно дважды отправить, чтобы изменить значение. Вы понимаете, что я имею в виду?