本篇旨在測試 Streamlit 的時間輸入函式 st.time_input().
呼叫 st.time_input() 函式並傳入必要參數 label 會建立一個時間選擇器, 其參數結構如下 :
st.time_input(label, value=None, key=None, help=None, on_change=None, args=None, kwargs=None, disabled=False, label_visibility="visible", step=timedelta(minutes=1))
st.time_input() 的傳回值為 datetime.time 物件, 用 st.write() 等函式輸出時預設會用 HH:MM:SS 字串格式顯示.
參數說明如下表 :
| st.time_input() 之參數 | 說明 |
|---|---|
| label | 時間輸入欄的標籤。 |
| value | 預設時間,可為 datetime.time 或 datetime.datetime。預設為當前時間。 |
| key | 用來識別元件的唯一鍵值。若不指定,則根據程式碼位置自動產生。 |
| help | 滑鼠移到元件上方時顯示的提示文字。 |
| on_change | 當輸入的時間變更時要呼叫的函式。 |
| args | 傳遞給 on_change 函式的位置參數 (tuple)。 |
| kwargs | 傳遞給 on_change 函式的關鍵字參數 (dict)。 |
| disabled | 布林值,若為 True,元件會被禁用。 |
| label_visibility | 標籤是否顯示,可為 "visible"(預設)、"hidden" 或 "collapsed"。 |
| step | 可選時間的間隔,以 datetime.timedelta 表示。預設為 1 分鐘。 |
# st-time_input-test-1.py
import streamlit as st
selected=st.time_input('請選擇時間 :')
if selected:
st.write(selected)
預設會顯示目前時間 :
點選下拉式選單可選取時間, 預設間隔為 15 分鐘 :
可以傳入 value 與 step 參數設定預設時間與間隔, 這需要用到 datetime.time() 與 datetime.timedelta() 函式, 如下例所示 :
測試 2 : 參數 value 與 step 用法 [看原始碼]
# st-time_input-test-2.py
import streamlit as st
from datetime import time, timedelta
default_time=time(8, 30) # 傳入時與分
step=timedelta(minutes=10) # 傳入分鐘間隔
selected=st.time_input('請選擇時間 :', value=default_time, step=step)
if selected:
st.write(selected)
此例呼叫 datetime.time() 傳入時與分建立 time 物件; 呼叫 datetime.timedelta() 傳入分鐘間隔建立 timedelta 物件, 分別傳給 value 與 step 參數, 結果如下 :
下面是 on_change 與 args 參數測試範例 :
測試 3 : 參數 on_change 與 args 用法 [看原始碼]
# st-time_input-test-3.py
import streamlit as st
def show_meeting_time(agenda):
meeting_time=st.session_state['meeting_time']
st.write(f'{agenda} 會議時間 {meeting_time}')
agenda=st.text_input('請輸入議程:', '年度計畫討論會')
st.time_input(
'請選擇時間 :',
key='meeting_time',
on_change=show_meeting_time,
args=(agenda,)
)
此例使用 args 傳送 agenda 引數給 on_change 事件處理函式的 agenda 參數, 另外設定 key 參數以便時間選擇器的值 (datetime.time 物件) 能以此為鍵儲存於 st.seesion_state 字典中, 結果如下 :
上例的引數也可以用 kwargs, 例如 :
測試 4 : 參數 on_change 與 kwargs 用法 [看原始碼]
# st-time_input-test-4.py
import streamlit as st
def show_meeting_time(agenda):
meeting_time=st.session_state['meeting_time']
st.write(f'{agenda} 會議時間 {meeting_time}')
agenda=st.text_input('請輸入議程:', '年度計畫討論會')
st.time_input(
'請選擇時間 :',
key='meeting_time',
on_change=show_meeting_time,
kwargs={'agenda': agenda}
)
結果與上例相同.








沒有留言 :
張貼留言