本篇旨在測試 Streamlit 的數值輸入框函式 st.number_input().
呼叫 st.text_area() 函式並傳入必要參數 label 會建立一個單行文字輸入框, 其參數結構如下 :
st.number_input(label, min_value=None, max_value=None, value=0.0, step=None, format=None, key=None, help=None, on_change=None, args=None, kwargs=None, *, disabled=False, label_visibility="visible", placeholder=None)
此函式只有一個必要參數 label, 因為 st.text_area() 可輸入多行文字故多了一個 height 參數, 傳回值是輸入框內所輸入之數值 (int 或 float).
參數說明如下表 :
| st.number_input() 之參數 | 說明 |
|---|---|
| label | 顯示在輸入框旁的標籤文字。 |
| min_value | 允許的最小值,預設為無限制。 |
| max_value | 允許的最大值,預設為無限制。 |
| value | 初始值,預設為 0.0。 |
| step | 每次增加或減少的步進值,預設為 1。 |
| format | 格式化顯示輸入數值的格式,例如 "%.2f"。 |
| key | 可選的唯一識別鍵,避免重複使用。 |
| help | 滑鼠懸停時顯示的提示文字。 |
| on_change | 當輸入值變更時觸發的回呼函式。 |
| args | 傳遞給 on_change 的位置參數 (tuple)。 |
| kwargs | 傳遞給 on_change 的關鍵字參數 (dict)。 |
| disabled | 若設為 True,則此元件為不可操作狀態。 |
| label_visibility | 控制標籤的顯示方式:'visible'(預設)、'hidden' 或 'collapsed'。 |
| placeholder | 輸入框內的預設提示文字(僅在未輸入時顯示)。 |
注意, min_value, max_value, value, 與 step 這四個參數型態必須一致, 即全為整數或全為浮點數, 不可以有的是整數, 有的卻是浮點數 (會拋出例外), 例如 :
測試 1 : 輸入整數 [看原始碼]
# st-number_input-test-1.py
import streamlit as st
age=st.number_input('請輸入年齡:', min_value=0, max_value=120, value=25, step=1)
st.write(f'您的年齡是:{age}')
結果如下 :
可見輸入框右邊有 + 與 - 按鈕可依照 step 參數值增減數值.
下面試輸入浮點數的例子 :
測試 2 : 輸入浮點數 [看原始碼]
# st-number_input-test-2.py
import streamlit as st
weight1=st.number_input('請輸入體重:', min_value=0.0, max_value=150.0, value=50.0, step=1.0)
st.write(f'您的體重是:{weight1}')
結果如下 :
下面範例測試 on_change 與 args 參數 :
測試 3 : 參數 on_change 與 args 用法 [看原始碼]
# st-number_input-test-3.py
import streamlit as st
def show_value(var):
value=st.session_state[var]
st.write(f'{var} 目前的數值是:{value}')
st.number_input('請輸入 A 之值:', key='A', on_change=show_value, args=('A',))
st.number_input('請輸入 B 之值:', key='B', on_change=show_value, args=('B',))
此例任一個輸入框數值有改變時便會觸發 on_change 事件呼叫 show_value() 函式並用 args 傳遞引數給 var, 利用其作為 key 在 st.session_state 字典中取得所記錄之輸入框數值後顯示, 結果如下 :
也可以用 kwargs 來傳遞引數 :
測試 4 : 參數 on_change 與 args 用法 [看原始碼]
# st-number_input-test-4.py
import streamlit as st
def show_value(var):
value=st.session_state[var]
st.write(f'{var} 目前的數值是:{value}')
st.number_input('請輸入 A 之值:', key='A', on_change=show_value, kwargs={'var': 'A'})
st.number_input('請輸入 B 之值:', key='B', on_change=show_value, kwargs={'var': 'B'})
結果與上例相同 :
下面測試 format 參數, 此參數用來控制元件上數值的顯示格式, 不影響函式的傳回值, 使用 Python 的格式化字串例如 %d, %e, %f, %g, %i, 與 %u 等, 參考 :
對於數值輸入而言最常用的是 %d 與 %f, 用法摘要如下表 :
| 常用 format 參數值範例 | 說明 |
|---|---|
| %d | 整數顯示格式,例如 1、2、3 |
| %.0f | 即始是浮點數也只顯示整數部分 |
| %.1f | 顯示一位小數,例如 1.0、2.5 |
| %.2f | 顯示兩位小數,例如 1.01、2.57 |
例如 :
測試 5 : 參數 format 用法 [看原始碼]
# st-number_input-test-5.py
import streamlit as st
st.subheader('format 參數測試')
st.number_input('整數', 0, 10, step=1, format='%d')
st.number_input('整數', 0.0, 10.0, step=0.1, format='%.0f')
st.number_input('一位小數', 0.0, 10.0, step=0.1, format='%.1f')
st.number_input('兩位小數', 0.0, 10.0, step=0.01, format='%.2f')
結果如下 :
請注意 %.0f 格式雖然值為浮點數, 但 0f 表示不顯示小數只顯示整數, 因此增減數值時要等到整數部分改變數值才會顯示變化, 但不影響其傳回值.





沒有留言 :
張貼留言