我试图根据用户在不同列中使用st.data_editor进行的更改来更改列中的值,并希望在更改后实时执行。但以下代码仅在2次更改后有效,并且仅显示初始更改。
代码通过运行streamlit run main.py
来运行
main.py
from page import page
page()
字符串
page.py
import streamlit as st
import pandas as pd
boq_df = pd.DataFrame()
def update_dataframe():
boq_df.loc[boq_df["ANALYZE"] == False, "TYPE"] = None
boq_df.ffill(inplace=True)
def page():
global boq_df
st.write("# Test")
if st.button("Analyze", type="primary"):
boq_df = pd.DataFrame(
data={
"ANALYZE": [True, False, True],
"CAT": ["Car", "Truck", "Bike"],
"TYPE": ["blue", False, "yellow"],
"DESC": ["two door", "four door", "single"],
}
)
if not boq_df.empty:
boq_df = st.data_editor(boq_df, height=700, on_change=update_dataframe())
型
1条答案
按热度按时间oknwwptz1#
不要在streamlit中使用全局变量。当用户界面发生变化时,Streamlit总是从上到下重新编译代码。相反,使用内置的会话状态字典。
另外,数据编辑器中的
on_change
仅在添加或删除行时有用。编辑时,直接使用data_editor
的返回值。我试着修改你的代码。
字符串
的数据