---
title: "#30DaysOfStreamlit Day25 st.session_state"
description: "この記事では、#30DaysOfStreamlitの内容の紹介を行います。\nst.session_state\nブラウザのタブ単位でセッション状態を作成できます。\nStreamlitでは、通常ウィジェットボタンでの更新等が実行されたときアプリケーション上の変数は初期化される為、ボタンが押された回数の記録等はでき"
---

[AIDXナレッジ - INSIGHT LAB](https://knowledge.insight-lab.co.jp/aidx)

# [#30DaysOfStreamlit Day25 st.session\_state](https://knowledge.insight-lab.co.jp/aidx/30daysofstreamlit-day25-st.session_state)

 作成者: [Budo Ogimoto](https://knowledge.insight-lab.co.jp/aidx/author/budo)｜2023年12月19日

## はじめに

この記事では、#30DaysOfStreamlitの内容の紹介を行います。   
#30DaysOfStreamlitについては[コチラの記事](https://knowledge.insight-lab.co.jp/aidx/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を表示します。

[完全な記事を表示](https://knowledge.insight-lab.co.jp/aidx/30daysofstreamlit-day25-st.session_state)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Budo Ogimoto"
  },
  "dateModified" : "2023-12-19T03:17:05.952Z",
  "datePublished" : "2023-12-19T03:17:05Z",
  "headline" : "#30DaysOfStreamlit Day25 st.session_state",
  "image" : {
    "@type" : "ImageObject",
    "height" : 1531,
    "url" : "https://download.insight-lab.co.jp/hubfs/30days_logo.png",
    "width" : 3121
  },
  "mainEntityOfPage" : "https://knowledge.insight-lab.co.jp/aidx/30daysofstreamlit-day25-st.session_state",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "AIDXナレッジ - INSIGHT LAB"
  }
}
```