質問するログイン新規登録

回答編集履歴

2

ソースにコメントを追加

2021/11/04 23:30

投稿

etherbeg
etherbeg

スコア1195

answer CHANGED
@@ -13,6 +13,7 @@
13
13
 
14
14
  get_data_source = st.sidebar.button("データ取得、更新")
15
15
  if get_data_source:
16
+ # 取得したデータは session_state オブジェクトに保存します
16
17
  st.session_state.hoge = 3
17
18
  st.text("データ取得しました。")
18
19
 

1

説明を追加、説明を書き換え

2021/11/04 23:30

投稿

etherbeg
etherbeg

スコア1195

answer CHANGED
@@ -1,4 +1,6 @@
1
+ ユーザがウィジットを操作するたびに、スクリプト全体が再度実行されます。このため、スクリプトのトップレベルに`hoge = 1`があると、その度にhogeは1に初期化されることになります。
2
+
1
- Session State API というのを用いるとユーザーセッションを跨いで値を保持できるようです。
3
+ Session State オブジェクトを用いるとユーザ操作によるスクリプトの再実行を跨いで値を保持できるようです。
2
4
  [https://docs.streamlit.io/library/api-reference/session-state](https://docs.streamlit.io/library/api-reference/session-state)
3
5
 
4
6
  ```python
@@ -7,17 +9,17 @@
7
9
 
8
10
  mode_list = ["a機能", "b機能"]
9
11
  func_sel = st.sidebar.selectbox("機能を選んでください", mode_list)
12
+         # hoge = 1
10
13
 
11
- # データ取得処理
12
14
  get_data_source = st.sidebar.button("データ取得、更新")
13
15
  if get_data_source:
14
- # 何らかのデータ取得処理を記載(ボタン押下時のみ取ってくるようにする)
15
16
  st.session_state.hoge = 3
16
17
  st.text("データ取得しました。")
17
18
 
18
19
  try:
19
20
  st.text(f"hoge:{st.session_state.hoge}")
20
21
  except AttributeError:
22
+ # st.session_state.hoge に値が保持されていない時のみ最初の読み込みと判断し初期化を行います
21
23
  st.session_state.hoge = 1
22
24
  st.text(f"hoge:{st.session_state.hoge}")
23
25