2025年5月23日 星期五

Streamlit 學習筆記 : 使用者輸入元件 (十二) 時間選擇器

本篇旨在測試 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 分鐘。


例如 : 


測試 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}
    )

結果與上例相同. 

沒有留言 :