こんにちは、JS2IIUです。
11日連続投稿チャレンジの2日目です。今のところまだチャレンジ継続できています。今回もよろしくお願いします。
はじめに
第2回目の今回は、Streamlitのインタラクティブなウィジェット機能をさらに活用し、フォームの作成と管理、および動的なUI要素の生成について解説します。これらの機能を駆使することで、ユーザーにとってより直感的で応答性の高いアプリケーションを構築できます。
フォームの作成と管理
Streamlitでは、st.formを使用して複数の入力をまとめて処理することが可能です。フォームを作成することで、複数の入力を一括で送信し、データの整合性を保ちながら処理できます。
こちらに示す以外のウィジェットについてはStreamlit本家のドキュメントを参照してください。
基本的なフォームの例
次の例では、ユーザーから名前と年齢を入力してもらい、それを一度に送信するシンプルなフォームを作成します。
import streamlit as st
# フォームの作成
with st.form("my_form"):
name = st.text_input("名前を入力してください")
age = st.number_input("年齢を入力してください", min_value=0, max_value=120)
# 送信ボタン
submitted = st.form_submit_button("送信")
# フォームが送信された後の処理
if submitted:
st.write(f"こんにちは、{name}さん。あなたは{age}歳です。")
このコードでは、st.formブロック内に複数のウィジェットを定義し、st.form_submit_buttonを押すことで一度にデータを送信します。これにより、ユーザーは必要な情報をまとめて入力し、処理を効率的に行うことができます。
フォームの応用: 複数のセクションを持つフォーム
もう少し複雑な例として、複数のセクションを持つフォームを作成してみましょう。
import streamlit as st
# 複数セクションを持つフォーム
with st.form("detailed_form"):
# 基本情報セクション
st.header("基本情報")
name = st.text_input("名前を入力してください")
age = st.number_input("年齢を入力してください", min_value=0, max_value=120)
# 連絡先情報セクション
st.header("連絡先情報")
email = st.text_input("メールアドレスを入力してください")
phone = st.text_input("電話番号を入力してください")
# 送信ボタン
submitted = st.form_submit_button("送信")
if submitted:
st.write(f"こんにちは、{name}さん。あなたは{age}歳です。")
st.write(f"連絡先情報: {email}, {phone}")
この例では、フォーム内にセクションを設け、異なる種類の情報を整理して入力できるようにしています。このようにフォームをセクション化することで、ユーザーはより直感的にデータを入力できます。
動的なUI要素の生成
次に、Streamlitの強力な機能である動的なUI要素の生成について解説します。動的なUI要素を利用することで、ユーザーの入力に応じて画面のコンテンツを変化させることができます。
基本的な動的UIの例
次の例では、ユーザーが選択したオプションに応じて、表示されるコンテンツが変化します。
import streamlit as st
# 選択オプション
option = st.selectbox(
"表示する内容を選んでください",
("テキスト", "画像", "データフレーム")
)
# 動的にコンテンツを表示
if option == "テキスト":
st.write("これはテキストです。")
elif option == "画像":
st.image("https://example.com/sample.jpg")
elif option == "データフレーム":
import pandas as pd
df = pd.DataFrame({
"列1": [1, 2, 3],
"列2": ["A", "B", "C"]
})
st.write(df)
このコードでは、ユーザーがドロップダウンメニューでオプションを選択すると、その選択に応じたコンテンツが動的に表示されます。st.imageのリンクを適宜書き換えて試してみてください!こちらの例はデータフレームを表示させた時の様子です。
条件に応じたコンテンツ表示
次に、条件に応じてコンテンツを表示する方法を紹介します。例えば、ユーザーが特定の条件を満たした場合にのみ、追加の入力フィールドを表示するケースです。
import streamlit as st
# 年齢の入力
age = st.number_input("年齢を入力してください", min_value=0, max_value=120)
# 条件に応じた動的UI
if age >= 18:
st.write("あなたは成人です。")
st.text_input("運転免許証の番号を入力してください")
else:
st.write("未成年のため、追加情報は必要ありません。")
この例では、ユーザーが18歳以上の場合にのみ、運転免許証の入力フィールドが表示されます。こうした動的なUI要素を利用することで、ユーザーに応じたカスタマイズされた体験を提供できます。
まとめ
第2回目では、Streamlitのインタラクティブなウィジェットを活用し、フォームの作成と管理、動的なUI要素の生成について学びました。これにより、ユーザーの入力に対して柔軟に対応するアプリケーションを構築することが可能です。
次回は、データのアップロードとダウンロードについて解説します。ファイルのアップロード、処理結果のダウンロード方法について、具体的な例を交えて説明しますので、ぜひご期待ください。
最後まで読んでいただきありがとうございました。73
補足:Streamlit応用編 記事リスト
Streamlit応用編 第1回: キャッシュ機能の活用
https://js2iiu.com/2024/08/28/streamlit-01-cache/
Streamlit応用編 第2回: インタラクティブなウィジェットの応用
https://js2iiu.com/2024/08/29/streamlit-02-widget/
Streamlit応用編 第3回: データのアップロードとダウンロード
https://js2iiu.com/2024/08/29/streamlit-03-download/
Streamlit応用編 第4回: レイアウトのカスタマイズ
https://js2iiu.com/2024/08/30/streamlit-04-layout/
Streamlit応用編 第5回: テーマのカスタマイズ
https://js2iiu.com/2024/08/31/streamlit-05-theme-custom/
Streamlit応用編 第6回: デプロイと共有
https://js2iiu.com/2024/09/01/streamlit-06-deploy/
Streamlit応用編 第7回: 認証とセキュリティ
https://js2iiu.com/2024/09/02/streamlit-07-security/
Streamlit応用編 第8回: データベースとの連携
https://js2iiu.com/2024/09/02/streamlit-08-database/
Streamlit応用編 第9回: 複雑なデータビジュアライゼーション
https://js2iiu.com/2024/09/05/streamlit-09-visualization/
Streamlit応用編 第10回: マルチページアプリの作成
https://js2iiu.com/2024/09/06/streamlit-10-multipage/
Streamlit応用編 第11回: StreamlitでAPIを作成する方法
https://js2iiu.com/2024/09/07/streamlit-11-api/

