Streamlitでは、コンポーネントのon_changeイベントを使用してコールバック関数を呼び出す際に、直接コンポーネントのkey属性を組み込む方法は提供されていません。
on_changeイベントはコールバック関数をトリガーするために使用されますが、このコールバック関数には、引数として呼び出し元のウィジェットの情報(key属性など)を自動で渡す機能はありません。
例として、画面上に複数のチェックボックスがあり、どのチェックボックスが変更されたのかを識別する必要がある場合の対処方法を記載します。
コールバック関数に追加のパラメータを渡す
on_changeのargsやkwargsを使用して、コールバック関数に追加情報を渡すことができます。この方法では、チェックボックスのkeyやその他の識別情報をコールバック関数に直接渡すことができます。
グローバル変数または外部状態の使用
アプリケーションの状態管理のために外部状態管理ソリューション(例えば、session_state)を使用し、どのチェックボックスが最後に変更されたかを追跡することもできます。ただし、この方法は複数のチェックボックスがほぼ同時に変更される可能性があるアプリケーションでは適切でないかもしれません。
以下に、コード例として、argsを使用してkeyをコールバック関数に渡す方法を示します。
import streamlit as st
def callback(checkbox_key):
st.write(f"Checkbox with key {checkbox_key} was changed.")
checkbox_key = "example_checkbox"
st.checkbox("Label", key=checkbox_key, on_change=callback, args=(checkbox_key,))
この例では、チェックボックスが変更されると、コールバック関数が呼び出され、変更されたチェックボックスのkeyが表示されます。argsを使用して、コールバック関数に必要な追加情報を渡しています。
argsやkwargsを使用することで、コールバック関数に対して柔軟に追加情報を渡し、Streamlitのウィジェット間のやり取りをより詳細に制御することが可能になります。