本篇旨在測試 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': '!'} # 傳關鍵字參數
)
結果與上面範例相同.





沒有留言 :
張貼留言