AIDXナレッジ - INSIGHT LAB

#30DaysOfStreamlit Day25 st.session_state

作成者: Budo Ogimoto|2023年12月19日

はじめに

この記事では、#30DaysOfStreamlitの内容の紹介を行います。
#30DaysOfStreamlitについてはコチラの記事を参照してください。

st.session_state

ブラウザのタブ単位でセッション状態を作成できます。
Streamlitでは、通常ウィジェットボタンでの更新等が実行されたときアプリケーション上の変数は初期化される為、ボタンが押された回数の記録等はできないことになっています。
再実行間で変数を共有させるためにセッション状態が定義されました。

また、コールバックを使用して状態を操作する機能も存在しています。

本記事では、セッション状態とコールバックを利用して重さの単位変換アプリケーションを構築していきます。

アプリケーションの構築

下記のようなPythonスクリプトを準備します。

上記のスクリプトを実行すると下記のような画面が展開します。

PoundsかKilogramsを編集すると、自動的に編集していない方の変数は自動的に計算されて内部のセッション状態が更新されます。
このセッション状態はブラウザのタブ毎に状態が保存されます。

コードの解説

まずは、必要なライブラリのインポートとアプリケーションのタイトルを設定します。

セッション状態の変数を更新するコールバック用の関数を作成します。
PoundをKilogramsに変更するlbs_to_kgとKilogramsをPoundに変更するkg_to_lbsを作成します。

値を入力するウィジェットを作成する為にヘッダーの設定とレイアウトを作成します。

作成したレイアウト上に入力用のウィジェットを配置します。
この時にコールバック用の関数をon_changeに記述します。
また、入力値の対象となるセッション状態の変数をkeyに記述します。

最後に、セッション状態の可視化の為にst.write を使いst.session_stateを表示します。