こんにちは、JS2IIUです。
UIの中で既定の選択肢を提示して、選択してもらうドロップボックスは基本的な要素です。Streamlitでどの様に選択肢を扱うかをみていきます。今回もよろしくお願いします。
はじめに
Streamlitは、Pythonだけで簡単にWebアプリを作成できるフレームワークです。
中でも、ユーザーに「選択」をさせたいときに便利なのが st.selectbox と st.multiselect です。
st.selectboxとは?
st.selectbox は、単一の選択肢を選ばせるドロップダウンリストです。
📌 基本の使い方
✅ ステップ1:モジュールのインポート
Python
import streamlit as st✅ ステップ2:選択肢を用意する
Python
fruits = ["りんご", "バナナ", "みかん"]✅ ステップ3:st.selectboxを使ってドロップダウンを表示
Python
selected_fruit = st.selectbox("好きなフルーツを選んでください:", fruits)✅ ステップ4:選ばれた値を表示
Python
st.write("あなたが選んだのは:", selected_fruit)💡 実行結果イメージ
画面には以下のようなドロップダウンが表示され、選択されたフルーツが下に表示されます。
🔍 主なパラメータの解説
| パラメータ | 説明 |
|---|---|
label | 表示されるラベルテキスト |
options | 選択肢のリストまたはタプル |
index | 初期選択のインデックス(デフォルトは0) |
key | セッション内でユニークな識別子(オプション) |
例:初期値を「みかん」にしたい場合
Python
st.selectbox("フルーツを選択:", fruits, index=2)st.multiselectとは?
st.multiselect は、複数の選択肢を選ばせたいときに使うウィジェットです。
📌 基本の使い方
✅ ステップ1:選択肢を定義
Python
languages = ["Python", "JavaScript", "C++", "Java"]✅ ステップ2:st.multiselectを使って複数選択UIを表示
Python
selected_languages = st.multiselect("好きな言語を選んでください:", languages)✅ ステップ3:選ばれた値を表示
Python
st.write("あなたが選んだ言語は:", selected_languages)🔍 主なパラメータの解説
| パラメータ | 説明 |
|---|---|
label | 表示される説明テキスト |
options | 選択肢のリスト |
default | 初期選択される値(リストで指定) |
key | ユニークキー(省略可) |
例:最初からPythonとC++を選択状態にしたい場合
Python
st.multiselect("言語を選んでください:", languages, default=["Python", "C++"])selectboxとmultiselectの違い
| 特徴 | st.selectbox | st.multiselect |
|---|---|---|
| 選択数 | 1つのみ | 複数選択可能 |
| 戻り値の型 | 単一の値(文字列など) | リスト(空の場合もある) |
| 主な用途 | ラジオボタンや選択画面 | チェックボックス群の代替 |
用途に応じて、使い分けるのがポイントです。
実践例:データフィルター付きアプリを作る
ここでは、selectboxとmultiselectを組み合わせて、簡単なデータフィルターアプリを作ってみましょう。
💡 目的
- 「カテゴリ」を
selectboxで1つ選ぶ - 「タグ」を
multiselectで複数選ぶ - 条件に合致したデータを表示する
✅ サンプルコード
Python
import streamlit as st
import pandas as pd
# ダミーデータ
data = pd.DataFrame({
"商品名": ["りんごジュース", "バナナチップス", "みかんゼリー", "アップルパイ"],
"カテゴリ": ["飲み物", "お菓子", "デザート", "お菓子"],
"タグ": [["果物", "甘い"], ["甘い", "軽食"], ["果物", "冷たい"], ["果物", "焼き菓子"]]
})
# カテゴリの選択
selected_category = st.selectbox("カテゴリを選択:", data["カテゴリ"].unique())
# タグの選択
all_tags = sorted({tag for tags in data["タグ"] for tag in tags})
selected_tags = st.multiselect("タグを選択:", all_tags)
# フィルター処理
filtered_data = data[data["カテゴリ"] == selected_category]
if selected_tags:
filtered_data = filtered_data[filtered_data["タグ"].apply(lambda tags: all(tag in tags for tag in selected_tags))]
# 結果表示
st.write("フィルター後のデータ:")
st.dataframe(filtered_data)まとめ
st.selectboxは 1つだけ選ばせたいとき に使う。st.multiselectは 複数選ばせたいとき に使う。- どちらも
labelとoptionsが基本パラメータ。 - 初期選択値は
index(selectbox)またはdefault(multiselect)で設定可能。 - 組み合わせると、柔軟で直感的なフィルター付きアプリも作れる。
参考リンク
最後に書籍のPRです。
24年9月に出版された「ハイパーモダンPython-信頼性の高いワークフローを構築するモダンテクニック」、Claudio Jolowicz著、嶋田、鈴木訳。開発環境の構築、プロジェクトの管理、テストに関して実践的な内容でとても参考になる一冊です。ぜひ手に取ってみてください。
最後まで読んでいただきありがとうございます。

