ページの作成

pagesディレクトリを作成し、その中に入れたスクリプトは自動的にマルチページ化される。
リンクもサイドバーに自動作成される。

表示を抑制したい場合は~/.streamlit/config.toml

[client]
showSidebarNavigation = false

ジャンプ

st.switch_page("スクリプト.py")

ジャンプボタンの作成

次のようにして、ページリンクを作成する。

st.page_link("スクリプト.py", label="ラベル")

コメント・シェア

ログイン機能

ログイン機能

次のようにauth_utils.pyを作成する。

import streamlit as st
import streamlit_authenticator as stauth

import yaml
from yaml.loader import SafeLoader

with open('config.yaml') as file:
config = yaml.load(file, Loader=SafeLoader)

authenticator = stauth.Authenticate(
config['credentials'],
config['cookie']['name'],
config['cookie']['key'],
config['cookie']['expiry_days']
)

def login_required(contents):
def wrapper(*args, **kwargs):
try:
authenticator.login()
except Exception as e:
st.error(e)

if st.session_state['authentication_status']:
st.toast('ログインに成功しました。')
authenticator.logout()
contents(*args, **kwargs)
elif st.session_state['authentication_status'] is False:
st.error('ユーザー名かパスワードが正しくありません。')
elif st.session_state['authentication_status'] is None:
st.warning('ユーザー名とパスワードを入力してください。')
return wrapper

呼び出し

コンテンツページにログインを課すのは次の要領。

import auth_utils
from auth_utils import login_required

@login_required
def main():
pass

認証情報

クッキーとアカウントのサンプルとして、開発ページにあるconfig.yamlをあげる。

cookie:
expiry_days: 30
key: some_signature_key # Must be a string
name: some_cookie_name
credentials:
usernames:
jsmith:
email: jsmith@gmail.com
failed_login_attempts: 0 # Will be managed automatically
first_name: John
last_name: Smith
logged_in: False # Will be managed automatically
password: abc # Will be hashed automatically
roles: # Optional
- admin
- editor
- viewer
rbriggs:
email: rbriggs@gmail.com
failed_login_attempts: 0 # Will be managed automatically
first_name: Rebecca
last_name: Briggs
logged_in: False # Will be managed automatically
password: def # Will be hashed automatically
roles: # Optional
- viewer
oauth2: # Optional
google: # Follow instructions: https://developers.google.com/identity/protocols/oauth2
client_id: # To be filled
client_secret: # To be filled
redirect_uri: # URL to redirect to after OAuth2 authentication
microsoft: # Follow instructions: https://learn.microsoft.com/en-us/graph/auth-register-app-v2
client_id: # To be filled
client_secret: # To be filled
redirect_uri: # URL to redirect to after OAuth2 authentication
tenant_id: # To be filled
pre-authorized: # Optional
emails:
- melsby@gmail.com

コメント・シェア

セッション

multiplier = 2

def my_func():
st.session_state.y = st.session_state.x * multiplier # xを与えるとyが2倍になる

def my_inv_func():
st.session_state.x = st.session_state.y / multiplier


x = st.number_input("x:", key = "x", on_change = my_func) # xに入力すると、yを2倍にする関数がon_changeで呼ばれる
y = st.number_input("y:", key = "y", on_change = my_inv_func)

st.write("st.session_state object:", st.session_state)

コメント・シェア

ボタン

st.button("テキスト"):

ブール値の取得

チェックボックス

st.checkbox("テキスト")

トグルボタン

st.toggle("テキスト")

複数項目からの選択

ラジオボタン

st.radio("テキスト", ["選択肢1", "選択肢2"])

ドロップダウンメニュー

st.selectbox("テキスト", ["選択肢1", "選択肢2"])

マルチセレクト

st.multiselect(
"テキスト",
選択肢のリスト,
デフォルト値のリスト
)

スライダー

st.slider("テキスト", 最小値, 最大値, デフォルト値)

範囲

st.slider(
"テキスト",
最小値, 最大値, (下のデフォルト値, 上のデフォルト値)
)

日付型

date型・time型・datetime型も使える.
例えば,

from datetime import time, datetime

st.slider(
"テキスト",
value=datetime(年, 月, 日, 時, 分), # デフォルト値
format="MM/DD/YY - hh:mm"
)

順序尺度のスライダー

select_sliderを使う.
例えば,

st.select_slider(
"ドリンクのサイズ",
options=["S", "M", "L"]
)

コメント・シェア

いずれも,初期値は引数valueで指定する.

1行

st.text_input("ラベル")
  • 字数制限はmax_charsで設定できる.
  • プレースホルダーはplaceholderで設定できる.

複数行

st.text_area("ラベル")
  • 字数制限はmax_charsで設定できる.
  • プレースホルダーはplaceholderで設定できる.

数値

st.number_input("ラベル")
  • 最小値(min_value),最大値(max_value)が設定できる.

日付

st.date_input("ラベル")
  • 最小値(min_value),最大値(max_value)が設定できる.
  • デフォルトのフォーマットはformat="YYYY/MM/DD"

時刻

st.time_input("ラベル")
  • デフォルトのステップはstep=0:15:00

コメント・シェア

テキスト表示

見出し

st.title("タイトル")
st.header("見出し")
st.subheader("小見出し")

write

次でprint(a, b, c)のような形になる.

st.write(a, b, c)

マークダウン

マークダウン形式のテキスト(markdown_textとする)を入れられる.

st.write(markdown_text)
# st.markdown(markdown_text)

データフレーム(dfとする)を入れると表で表示される.

st.write(df)
# st.dataframe(df)

LaTeX

st.latex(r"""e^{i\pi} + 1 = 0""")

HTML上での表記

st.code("文字列として表示すべきコード")
st.html("タグを含んだテキスト")

ストリームの出力

st.write_stream(llm_stream)

コメント・シェア

フォーム

fm = st.form("フォーム名")

with fm:
# フォーム内にウィジェットを配置
submitted = st.form_submit_button("送信ボタンのラベル")

if submitted:
# 処理

フォームにはレイアウトに関する関数同様,オブジェクト表記が使用できる.

コメント・シェア

強調されたメッセージ

st.error("エラー内容")
st.warning("注意する内容")
st.info("情報提供する内容")
st.success("成功した内容")
st.toast("一定時間で消える通知メッセージ")

スピナー

with st.spinner(text="処理中であることを伝えるメッセージ"):
# 処理
# 完了後の処理
with st.status("スピナーが出ているときに表示するメッセージ") as s:
# 処理
st.write("折りたたまれるメッセージ")
s.update(label="折りたたみ時に表示するメッセージ")

プログレスバー

bar = st.progress(n0)  # n0は初期値
bar.progress(n) # nを増加させる処理、n=100でバーは満たされる

コメント・シェア

レイアウト

サイドバー

side = st.sidebar

with side:
# サイドバーの内容
# `with`を使わずに`side.`で始めるオブジェクト表記で直接内容を書いてもよい

タブ

tab1, tab2 = st.tabs(["Tab 1", "Tab2"])

with tab1:
# タブ1の内容
# `with`を使わずに`tab1.`で始めるオブジェクト表記で直接内容を書いてもよい

カラム

col1, col2 = st.columns(2)  # col1, spacer, col2 = st.columns([2, 1, 2])のように比率の指定もできる

with col1:
# カラム1の内容
# `with`を使わずに`col1.`で始めるオブジェクト表記で直接内容を書いてもよい

詳細折りたたみ

expand = st.expander("折りたたみ見出し")

with expand:
# 折りたたんでいる内容
# `with`を使わずに`expand.`で始めるオブジェクト表記で直接内容を書いてもよい

ポップ

pop = st.popover("ポップボタンのラベル")

with pop:
# 隠している内容
# `with`を使わずに`popover.`で始めるオブジェクト表記で直接内容を書いてもよい

コメント・シェア

  • page 1 of 1
著者の絵

ねこせんせい

One cat just leads to another.
(Ernest Hemingway)


色鉛筆塗り


校正室