streamlit_session_state.py
· 1.7 KiB · Python
Originalformat
import streamlit as st
import pandas as pd
def main():
# 初始化 session_state
if "data" not in st.session_state:
st.session_state.data = pd.DataFrame({
"ID": [1, 2, 3],
"Name": ["Alice", "Bob", "Charlie"],
"Age": [25, 30, 35],
"OtherField": ["Edit me", "Edit me too", "Also editable"]
})
if "edited_data" not in st.session_state:
st.session_state.edited_data = None
if "is_submitted" not in st.session_state:
st.session_state.is_submitted = False
# 介面標題與說明
st.title("可編輯的 DataFrame 範例")
st.header("請編輯表格內容,並點擊 '更新資料' 以儲存變更。")
# 編輯 DataFrame
edited_df = st.data_editor(
st.session_state.data,
num_rows="fixed",
key="editable_table",
use_container_width=True,
column_config={
"ID": st.column_config.NumberColumn("ID", disabled=True), # 禁止編輯 ID
"OtherField": st.column_config.TextColumn("OtherField") # 允許編輯 OtherField
},
)
# 按鈕:儲存編輯後的資料
if st.button("更新資料"):
st.session_state.edited_data = edited_df
st.session_state.is_submitted = True
st.success("變更已儲存!")
# 更新 session_state 的資料
if st.session_state.edited_data is not None and st.session_state.is_submitted:
st.session_state.data = st.session_state.edited_data
st.success("資料已更新!")
st.session_state.edited_data = None
st.session_state.is_submitted = False
# 顯示目前資料
st.subheader("目前資料:")
st.dataframe(st.session_state.data)
if __name__ == "__main__":
main()
| 1 | import streamlit as st |
| 2 | import pandas as pd |
| 3 | |
| 4 | def main(): |
| 5 | # 初始化 session_state |
| 6 | if "data" not in st.session_state: |
| 7 | st.session_state.data = pd.DataFrame({ |
| 8 | "ID": [1, 2, 3], |
| 9 | "Name": ["Alice", "Bob", "Charlie"], |
| 10 | "Age": [25, 30, 35], |
| 11 | "OtherField": ["Edit me", "Edit me too", "Also editable"] |
| 12 | }) |
| 13 | if "edited_data" not in st.session_state: |
| 14 | st.session_state.edited_data = None |
| 15 | if "is_submitted" not in st.session_state: |
| 16 | st.session_state.is_submitted = False |
| 17 | |
| 18 | # 介面標題與說明 |
| 19 | st.title("可編輯的 DataFrame 範例") |
| 20 | st.header("請編輯表格內容,並點擊 '更新資料' 以儲存變更。") |
| 21 | |
| 22 | # 編輯 DataFrame |
| 23 | edited_df = st.data_editor( |
| 24 | st.session_state.data, |
| 25 | num_rows="fixed", |
| 26 | key="editable_table", |
| 27 | use_container_width=True, |
| 28 | column_config={ |
| 29 | "ID": st.column_config.NumberColumn("ID", disabled=True), # 禁止編輯 ID |
| 30 | "OtherField": st.column_config.TextColumn("OtherField") # 允許編輯 OtherField |
| 31 | }, |
| 32 | ) |
| 33 | |
| 34 | # 按鈕:儲存編輯後的資料 |
| 35 | if st.button("更新資料"): |
| 36 | st.session_state.edited_data = edited_df |
| 37 | st.session_state.is_submitted = True |
| 38 | st.success("變更已儲存!") |
| 39 | |
| 40 | # 更新 session_state 的資料 |
| 41 | if st.session_state.edited_data is not None and st.session_state.is_submitted: |
| 42 | st.session_state.data = st.session_state.edited_data |
| 43 | st.success("資料已更新!") |
| 44 | st.session_state.edited_data = None |
| 45 | st.session_state.is_submitted = False |
| 46 | |
| 47 | # 顯示目前資料 |
| 48 | st.subheader("目前資料:") |
| 49 | st.dataframe(st.session_state.data) |
| 50 | |
| 51 | if __name__ == "__main__": |
| 52 | main() |
| 53 |