2025年5月21日 星期三

Streamlit 學習筆記 : 使用者輸入元件 (六) 單行文字輸入框

本篇旨在測試 Streamlit 的單行文字輸入框函式 st.text_input().

本系列所有測試文章參考 :


呼叫 st.text_input() 函式並傳入必要參數 label 會建立一個單行文字輸入框, 其參數結構如下 : 

st.text_input(label, value="", max_chars=None, key=None, type="default", help=None, autocomplete=None, on_change=None, args=None, kwargs=None, disabled=False, label_visibility="visible", placeholder=None)

參數說明如下表 :


 st.text_input() 之參數  說明
label 元件標籤文字。
value 預設文字內容,預設為空字串。
max_chars 可輸入的最大字元數,預設為無限制。
key 元件在 Session State 中的唯一識別字串。
type 輸入類型,可為 "default" 或 "password",預設為 "default"。
help 當滑鼠移至元件上時顯示的說明文字。
autocomplete 設定為 "on" (預設) 或 "off"控制瀏覽器是否提供自動完成功能。
on_change 當文字變更時觸發的 callback 函式。
args 傳給 on_change 的位置參數 (tuple)。
kwargs 傳給 on_change 的關鍵字參數 (dict)。
disabled 若設為 True,則元件無法使用。
label_visibility 控制標籤是否顯示,可為 "visible"、"hidden" 或 "collapsed"。
placeholder 未輸入時的提示文字。


參數 type 可分為一般輸入框 (預設為 'default') 或密碼輸入框 ('password') 兩種, 傳回值是輸入的字串, 例如 :  


測試 1 : 參數 type 的用法 [看原始碼] 

# st-text_input-test-1.py
import streamlit as st

account=st.text_input('帳號:')
password=st.text_input('密碼:', type='password')
st.write(f'帳號 : {account}')
st.write(f'密碼 : {password}')

type 設為 'password' 時輸入的字元會被遮蔽, 按右邊的眼睛按鈕則可強迫揭露 :





參數 value 預設是空字串, 但可以自行設定初始值, 這有提示輸入格式效果, 例如 :


測試 2 : 用參數 value 設定預設值 [看原始碼] 

# st-text_input-test-2.py
import streamlit as st

email=st.text_input('E-mail:', value='abc@gmail.com')
st.write(f'你的 email : {email}')

結果如下 :




上圖為初始化時輸入框內已有預設值, 下圖為更改 email 後按 Enter 套用的結果. 

如果是為了輸入提示, 有些欄位使用 placeholder 參數可能比用 value 設預設值較適合, 例如 :


測試 3 : 參數 placeholder 與 max_chars 參數用法 [看原始碼] 

# st-text_input-test-3.py
import streamlit as st

email=st.text_input(
    'E-mail:',
    placeholder='例如 abc@gmail.com (最長 50 字元)',
    max_chars=50
    )
st.write(f'你的 email : {email}')

此例用參數 max_chars 限制 email 欄位最長為 50 個字元 (超過無法再輸入), 在 placeholder 參數中除了提示 email 格式外也提示使用者字元長度限制 :




上圖為初始化時輸入框會顯示提示 (這不是預設值), 下圖為點擊輸入框時會跳出一個瀏覽器已儲存之歷史資訊, 可以點選快速自動填入無須手動輸入, 這是因為 autocomplete 參數預設為 'on' 之故, 如果不想自動顯示之前輸入過的資料, 可傳入 autocomplete='off'. 


測試 4 : 參數 on_change 與 args 參數用法 [看原始碼] 

# st-text_input-test-4.py
import streamlit as st

def greet(punctuation):
    name=st.session_state.name
    st.write(f'您好! {name}{punctuation}')

st.text_input(
    label="輸入你的名字:",
    key='name',  # 必須設 key 才能使用 st.session_state
    on_change=greet,
    autocomplete='off',
    args=('!',)  # 傳位置參數
    )  

輸入文字按 Enter 輸入發生變動觸發 on_change 事件呼叫 greet() :




也可以用 kwargs 傳遞引數 :


測試 5 : 參數 on_change 與 kwargs 參數用法 [看原始碼] 

# st-text_input-test-5.py
import streamlit as st

def greet(punctuation):
    name=st.session_state.name
    st.write(f'您好! {name}{punctuation}')

st.text_input(
    label="輸入你的名字:",
    key='name',  # 必須設 key 才能使用 st.session_state
    on_change=greet,
    autocomplete='off',
    kwargs={'punctuation': '!'}  # 傳關鍵字參數
    )  


結果與上面範例相同. 

沒有留言 :