回答編集履歴

2

ソースにコメントを追加

2021/11/04 23:30

投稿

etherbeg
etherbeg

スコア1195

test CHANGED
@@ -28,6 +28,8 @@
28
28
 
29
29
  if get_data_source:
30
30
 
31
+ # 取得したデータは session_state オブジェクトに保存します
32
+
31
33
  st.session_state.hoge = 3
32
34
 
33
35
  st.text("データ取得しました。")

1

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

2021/11/04 23:30

投稿

etherbeg
etherbeg

スコア1195

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