Streamlitでは、バックエンドで長時間処理が必要な場合に、ユーザーにその状況を分かりやすく伝えるための「処理中メッセージ」を簡単に実装できます。
具体的なコード例を交えながら、処理中メッセージを表示する方法をまとめます。
スピナー(spinner)の利用
Streamlitはst.spinner
というメソッドを提供しており、簡単に「処理中」のメッセージを表示できます。
基本構文
基本的なコードです。
import streamlit as st
import time
# 処理中メッセージを表示する
with st.spinner("処理中です。しばらくお待ちください..."):
time.sleep(5) # 例として5秒間の処理をシミュレート
st.success("処理が完了しました!")
with st.spinner("メッセージ"):
の中に、処理を記述します。
処理が終了すると、自動的にスピナーが非表示になります。
処理完了後に、st.success
などを使って完了メッセージを表示することが推奨されます。
処理中のメッセージ表示は、以下のようになります。
条件付きで処理中メッセージを表示
ユーザーのアクション(例:ボタン押下)によって処理中メッセージを表示したい場合は、以下のように実装できます。
import streamlit as st
import time
if st.button("処理を開始"):
with st.spinner("処理中です。しばらくお待ちください..."):
time.sleep(3) # 処理をシミュレート
st.success("処理が完了しました!")
st.button
でユーザーの操作をトリガーとしています。
ボタンがクリックされると、処理中メッセージが表示されます。
動的なメッセージを表示
処理の進行状況に応じてメッセージを動的に変更することも可能です。
import streamlit as st
import time
if st.button("処理を開始"):
with st.spinner("🔄処理中"):
# メッセージ表示用の空のプレースホルダーを作成
message_placeholder = st.empty()
time.sleep(2)
# 動的にメッセージを更新
message_placeholder.write("ステップ1を実行中...")
time.sleep(2)
message_placeholder.write("ステップ2を実行中...")
time.sleep(2)
# 処理完了後にメッセージをクリアし、成功メッセージを表示
message_placeholder.empty()
st.success("すべての処理が完了しました!")
st.write
で動的にメッセージを更新することで、ユーザーに進捗を示します。
実際のユースケースでの応用
以下は、ファイルのアップロード後に処理中メッセージを表示する例です。
import streamlit as st
import time
uploaded_file = st.file_uploader("ファイルをアップロードしてください")
if uploaded_file is not None:
with st.spinner("ファイルを処理しています..."):
time.sleep(3) # 処理をシミュレート
st.success("ファイルの処理が完了しました!")
ユーザーがファイルをアップロードしたタイミングで処理を開始します。
処理中にスピナーを表示し、終了後にメッセージを出します。
プログレスバー(progress)の利用
st.progress
を使うと、処理の進捗状況をバーで視覚的に示すことができます。
import streamlit as st
import time
if st.button("処理を開始"):
progress_bar = st.progress(0)
for i in range(101):
time.sleep(0.05) # 処理をシミュレート
progress_bar.progress(i)
st.success("処理が完了しました!")
st.progress
を初期化し、進捗を更新します。
progress_bar.progress(値)
で進捗バーの状態を更新できます。
まとめ
Streamlitでは、st.spinner
を使うことで簡単に処理中メッセージを表示できます。また、進行状況の表示やst.progress
との併用で、さらにユーザーフレンドリーなインターフェースを実現可能です。