ButaDon
@ButaDon

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Streamlit で、プログラムコードから任意に リロード = 全画面更新 を行うにはどうすれば良いでしょう?

解決したいこと

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

1Answer

現在のバージョンはわかりませんが、streamlitではリロード機能はなかったと思います。
「streamlit_autorefresh」というコンポーネントを有志の方が作成されています。

自動更新のコンポーネントで用途に合うかわかりませんが実行するタイミングを制御すれば、
任意のタイミングで画面更新を行えると思います。

0Like

Your answer might help someone💌