Streamlit で、プログラムコードから任意に リロード = 全画面更新 を行うにはどうすれば良いでしょう?
Q&A
解決したいこと
streamlit を使ったpythonによるWebアプリケーション開発で、「 プログラムから画面再描画( リロード )を行う方法 」をご存知の方がいらっしゃったら、お手数ですがお教え頂けないでしょうか。よろしくおねがいします。
該当するソースコード
# ※本質でないコードは略。
# https://qiita.com/irisu-inwl/items/140b260eb7918fc09c8e を使い、Webアプリでのグローバル変数的な物を作成
global_session_state = _get_state()
# 上述フラグの初期化
if global_session_state.flag is None:
global_session_state.flag = False
# 上述フラグの状態により、画面表示内容を切り替える
button_pushed = False
if global_session_state.flag:
button_pushed = st.button("ボタン1"):
else:
button_pushed = st.button("ボタン2"):
if button_pushed :
global_session_state.flag = not global_session_state.flag
# TODO ここで画面更新 = リロードするコードを実行したい。Win32 APIで、InvalidateRect() や SendMessage( WM_PAINT... ) のような感じ。
# でないとボタンを押した結果が、すぐ画面に反映されない。ボタン1と2を押したのに、表示がすぐ交互に切り替わらない。
# ボタンを2回クリックする = 2回目のクリックはstreamlitにリロードをさせるための物。
# streamlitでは、ウィジェットが押される等をした時にリロードが起きる挙動になっている。このリロードを、プログラムが任意に起こしたい。
自分で試したこと
5秒毎に強制リロードする仕組みを、裏技的に自作する方法を下記で調べました。が、これをせずともリロードする標準的な機能が提供されているのではないか?と思い、本件に至りました。
https://stackoverflow.com/questions/62718133/how-to-make-streamlit-reloads-every-5-seconds
0