Streamlitでは、ボタンをクリックした際に特定の処理を実行させるためにon_click
引数を使用できます。
この引数に関数を渡すことで、ユーザーがボタンをクリックしたときにその関数が実行されます。
on_click
の基本的な使い方をまとめます。
使い方
まずは、ボタンをクリックした際に関数を実行する基本的な例を見てみましょう。
import streamlit as st
# 実行する関数を定義
def say_hello():
st.write("Hello, Streamlit!")
# ボタンを配置し、on_clickに関数を指定
st.button("Click Me", on_click=say_hello)
say_hello
関数が定義されています。
この関数は、ボタンをクリックした際に"Hello, Streamlit!"
と表示します。
st.button
にon_click=say_hello
を指定することで、ボタンがクリックされるとsay_hello
が実行されます。
関数に引数を渡す方法
場合によっては、ボタンをクリックした際に実行される関数に引数を渡したいことがあります。
その場合は、args
やkwargs
を使用します。
import streamlit as st
# 実行する関数を定義
def greet(name):
st.write(f"Hello, {name}!")
# ボタンを配置し、on_clickに関数と引数を指定
st.button("Greet", on_click=greet, args=("Alice",))
greet
関数は、渡された名前を使って挨拶を表示します。
args=("Alice",)
を指定することで、"Alice"
という引数がgreet
関数に渡されます。
kwargs
を使った例は以下のとおりです。
st.button("Greet", on_click=greet, kwargs={"name": "Bob"})
複数のボタンで異なる処理を実行
複数のボタンを配置して、それぞれ異なる処理を実行する例です。
import streamlit as st
def process_a():
st.write("Processing A...")
def process_b():
st.write("Processing B...")
st.button("Process A", on_click=process_a)
st.button("Process B", on_click=process_b)
ボタンの状態管理
st.session_state
を利用して、ボタンのクリック状態を管理することができます。
import streamlit as st
# ボタンが押されたときの処理
def toggle_state():
st.session_state["button_clicked"] = not st.session_state.get("button_clicked", False)
# 初期状態の設定
if "button_clicked" not in st.session_state:
st.session_state["button_clicked"] = False
# ボタンを配置
st.button("Toggle", on_click=toggle_state)
# 状態に応じてメッセージを表示
if st.session_state["button_clicked"]:
st.write("Button is ON")
else:
st.write("Button is OFF")
st.session_state
を使ってボタンがクリックされた状態をトグルしています。
ボタンがクリックされるたびに状態が変わり、それに応じてメッセージを切り替えています。
実用例 フォームの送信ボタン
ボタンを使った簡単なフォームの例です。
import streamlit as st
def submit_form():
st.write("Form submitted!")
st.write(f"Name: {st.session_state['name']}")
st.write(f"Email: {st.session_state['email']}")
# 入力フィールド
st.text_input("Name", key="name")
st.text_input("Email", key="email")
# 送信ボタン
st.button("Submit", on_click=submit_form)
入力フィールドの値はst.session_state
に格納されています。
submit_form
関数でそれらの値を取得してフォーム送信時に表示します。
まとめ
Streamlitのボタンでon_click
を活用することで、ユーザーインタラクションを簡単に実現できます。
関数を直接渡すだけでなく、args
やkwargs
を使って柔軟に引数を指定可能です。また、st.session_state
を使うことで、ボタンの状態やクリック結果をアプリ全体で管理できます。