本篇旨在測試 Streamlit 的多行文字輸入框函式 st.text_area().
呼叫 st.text_area() 函式並傳入必要參數 label 會建立一個單行文字輸入框, 其參數結構如下 :
st.text_area(label, value="", height=None, max_chars=None, key=None, help=None, on_change=None, args=None, kwargs=None, placeholder=None, disabled=False, label_visibility="visible")
可見基本上與 st.text_input() 的參數結構幾乎相同, 只有一個必要參數 label (但沒有 autocomplete 參數), 因為 st.text_area() 可輸入多行文字故多了一個 height 參數, 傳回值是輸入框內所輸入之字串.
參數說明如下表 :
| st.text_area() 之參數 | 說明 |
|---|---|
| label | 文字框旁的標籤文字。 |
| value | 預設顯示的文字,預設為空字串。 |
| height | 文字框的高度(像素)。若未設定,則會自動調整高度。 |
| max_chars | 允許輸入的最大字元數,超過則無法再輸入。 |
| key | 為元件設定唯一鍵值,避免重複。 |
| help | 當滑鼠懸停時顯示的提示文字。 |
| on_change | 當內容變動時所觸發的回呼函式。 |
| args | 傳遞給 on_change 的參數(位置引數)。 |
| kwargs | 傳遞給 on_change 的參數(關鍵字引數)。 |
| placeholder | 顯示在空白文字框中的提示文字。 |
| disabled | 設為 True 時禁用輸入框。 |
| label_visibility | 控制標籤是否可見,值可為 "visible"、"hidden" 或 "collapsed"。 |
# st-text_area-test-1.py
import streamlit as st
st.subheader('留言板')
msg=st.text_area('請輸入留言 :')
if msg:
st.write(msg)
此例僅傳入必要參數 label, 結果如下 :
可見多行文字輸入框 height 參數預設雖然為 None, 但實際上預設高度可輸入 3 行資料
(實際渲染高度約 136 px) , 當輸入內容超過時會自動出現卷軸), 可以拖曳右下角小按鈕手動縮放輸入框大小, 注意, 輸入完成要按 Ctrl+Enter 才會發生 on_change 事件傳回輸入文字, 如果只按 Enter 只是在輸入框中跳下一行而已.
下面範例傳入 value 參數設定輸入框預設內容 (也可以做為輸入提示) 並傳入 height 參數設定輸入框高度 :
測試 2 : 參數 value 與 height 用法 [看原始碼]
# st-text_area-test-2.py
import streamlit as st
st.subheader('留言板')
msg=st.text_area('請輸入留言 :', value='優良賣家', height=200)
if msg:
st.write(msg)
結果如下 :
可見由於 value 已設定了輸入框的值, 所以初始化時 msg 有值就輸出此內容了.
如果只是要做輸入提示的話, 傳入 placeholder 參數可能較好, 例如 :
測試 3 : 參數 placeholder 與 max_chars 的用法 [看原始碼]
# st-text_area-test-3.py
import streamlit as st
st.subheader('留言板')
msg=st.text_area('請輸入留言 :', placeholder='優良賣家', max_chars=100)
if msg:
st.write(msg)
結果如下 :
由於 placeholder 與 value 無關, 初始化時 value 是預設值空字串, 所以 if msg 為 False 就沒有輸出結果了. 注意, 若輸入之字元數超過 max_chars 時就無法再繼續輸入了.
下列範例測試 on_change 與 args 參數 :
測試 4 : 參數 on_change 與 args 參數用法 [看原始碼]
# st-text_area-test-4.py
import streamlit as st
def on_text_change(user):
comment=st.session_state['comment']
st.write(f'{user} 留言 : {comment}')
st.subheader('留言板')
msg=st.text_area(
'請輸入留言 :',
key='comment',
on_change=on_text_change,
args=('匿名',)
)
此例利用設定 key 讓輸入框的值會記錄在 st.seesion_state 字典中, 當在輸入框按下 Ctrl+Enter 時會觸發 on_change 事件呼叫 on_text_change() 並透過 args 傳遞引數, 結果如下 :
引數也可以透過 kwargs 參數傳遞, 例如 :
測試 5 : 參數 on_change 與 kwargs 參數用法 [看原始碼]
# st-text_area-test-5.py
import streamlit as st
def on_text_change(user):
comment=st.session_state['comment']
st.write(f'{user} 留言 : {comment}')
st.subheader('留言板')
msg=st.text_area(
'請輸入留言 :',
key='comment',
on_change=on_text_change,
kwargs={'user': '匿名'}
)
此例只是將上例的 args 元組改為 kwargs 字典傳遞, 結果如下 :





沒有留言 :
張貼留言