Streamlit st.number_input()数值取整与条件逻辑实现问题
解决Streamlit number_input的两个自定义需求
一、实现input1自动取整到最近的0.5倍数
format参数仅控制数值的显示格式,无法实现自动取整逻辑。要实现输入后自动对齐到0.5的倍数,需要手动处理输入值,结合st.session_state可让输入框同步显示处理后的结果:
import streamlit as st # 初始化会话状态,保存处理后的input1值 if "input1" not in st.session_state: st.session_state.input1 = 5.0 # 显示输入框,使用会话状态中的值作为当前值 input1_raw = st.number_input("x", value=st.session_state.input1, step=0.5, format="%0.1f") # 将输入值取整到最近的0.5倍数:放大2倍取整后再缩小2倍 st.session_state.input1 = round(input1_raw * 2) / 2 input1 = st.session_state.input1 # 验证结果(可选) st.write("处理后的x值:", input1)
二、实现input2的反向递增与区间取整
该需求无法通过number_input原生参数实现,需结合st.session_state跟踪当前值,自定义处理逻辑:
import streamlit as st # 初始化会话状态,保存处理后的input2值 if "input2" not in st.session_state: st.session_state.input2 = -110 def process_y(new_value, prev_value): # 处理-100到100之间的数值:正数取100,负数取-100 if -100 <= new_value <= 100: return 100 if new_value >= 0 else -100 # 处理从-100递增的特殊情况:直接跳转到101 if prev_value == -100 and new_value > prev_value: return 101 # 处理从101递减的特殊情况:直接跳转到-100 if prev_value == 101 and new_value < prev_value: return -100 # 其他超出区间的数值保持原样 return new_value # 显示输入框 input2_raw = st.number_input("y", value=st.session_state.input2) # 处理输入值并更新会话状态 st.session_state.input2 = process_y(input2_raw, st.session_state.input2) input2 = st.session_state.input2 # 验证结果(可选) st.write("处理后的y值:", input2)
内容的提问来源于stack exchange,提问作者bismo
相关产品推荐
相关产品推荐

