Streamlitでボタンをクリックした際に確認ダイアログを表示し、ユーザーが「OK」を選択した場合のみ処理を実行するコードをメモしておきます。
Streamlit自体には確認ダイアログを直接表示する機能がないため、セッション(st.session_state
)を利用してワークアラウンドを行います。
以下のコード例では、st.session_state
を利用して、ユーザーのアクション(「OK」ボタンや「キャンセル」ボタンのクリック)に基づいて表示内容を制御しています。
import streamlit as st
# 初期設定:ボタンクリック状態を管理するセッション変数の定義
if 'show_confirm' not in st.session_state:
st.session_state.show_confirm = False # 確認ボタンの表示状態
if 'action_performed' not in st.session_state:
st.session_state.action_performed = False # 処理実行状態
def reset_state():
st.session_state.show_confirm = False
st.session_state.action_performed = False
def confirm_action():
st.session_state.show_confirm = True
def perform_action():
st.session_state.action_performed = True
st.session_state.show_confirm = False
st.success('処理が正常に実行されました。')
def cancel_action():
st.session_state.action_performed = True
st.session_state.show_confirm = False
st.info('処理はキャンセルされました。')
st.title('処理実行の確認デモ')
# メインの確認ボタン(「処理を実行しますか?」)
if not st.session_state.show_confirm and not st.session_state.action_performed:
st.button('処理を実行しますか?', on_click=confirm_action)
# 確認メッセージと「OK」「キャンセル」ボタン
if st.session_state.show_confirm:
st.write('本当に処理を実行しますか?')
col1, col2 = st.columns(2)
with col1:
st.button('OK', on_click=perform_action)
with col2:
st.button('キャンセル', on_click=cancel_action)
# 処理実行後に状態リセットボタンを表示
if st.session_state.action_performed:
st.button('別の処理を実行する', on_click=reset_state)
ユーザーが最初に「処理を実行しますか?」ボタンをクリックすると、確認メッセージと選択肢(「OK」「キャンセル」)が表示され、いずれかのボタンがクリックされると、対応するアクションが実行され、確認メッセージと選択肢は非表示になります。
また、処理をリセットするためのボタンも提供され、これによりユーザーは新たな処理を開始できます。