はじめに
普段からPythonを使うことが多いです。
その中でもPython使用者にとって使いやすいフレームワーク、streamlitでアプリ開発するの楽しいですよね。
今回はsession_stateを使うことでテキストを削除したり、変数の値を残したりできる方法について書いていきます。
非常に便利ですが、わたしもすぐ使い方を忘れてしまうので備忘録として残しておきます。
やりたいこと
- テキストエリアにテキストを入力できるようにする(空の状態で始まる)
- 削除ボタンを押したらテキストが消える
- 処理をしてもテキストの内容を残しておきたい場合(※必要に応じて)
初期値の設定
session_stateを使うときは、テキストエリアを空で始める初期値を設定しておきます。
if "text_input" not in st.session_state:
st.session_state.text_input = ""
テキストを削除する関数の定義
事前にテキストを削除できる関数を作成しておきます。今回削除したいのはsession_stateのtext_input_areaです。
def clear_text():
st.session_state.text_input_area = "" # session_stateをリセット
テキストエリアの作成
ここではテキストを入力できるエリアを作成しています。valueでは最初に初期値の設定をしたtext_inputとすることで空の状態で始めることができます。またkeyではtext_input_areaとしておくことでテキストが入力された状態の値をこの後処理できるようになります。
text = st.text_area(
"テキストを入力してください",
value=st.session_state.text_input, # 初期値として表示させるテキスト
height=300, # 高さを300pxに設定
key="text_input_area" # 一意なキーを指定する
)
削除ボタンの作成
ここでは事前に定義した関数clear_textを使います。on_click=clear_textとすることで先ほどkeyで定めたtext_input_areaの内容を削除することができるようになります。どのような場所でもこの処理を呼び出せるところがメリットです。
delete_button = st.button("削除", on_click=clear_text)
テキストが変更された場合はsession_stateに保存する
このコードを追加しておくことで入力されたテキストの内容を保存することができます。これにより入力内容が保存された状況(テキストが消えない)になります。
if text != st.session_state.text_input_area:
st.session_state.text_input_area = text
最後に
今回はsession_stateについてでした。
最初はこの機能の使い方がわからず、ボタンを押しても何も変わらない!という状況でした。使いこなせると非常に便利なのでたくさん使っていきたいですね。