Streamlit加载Spinner位置异常:如何固定在聊天消息下方?
解决Streamlit Spinner被聊天消息顶走的问题
想让Spinner固定在聊天消息下方、输入框上方,关键是用st.empty()提前占好位置,别让新消息把它挤上去。
修改后的代码
import time import streamlit as st def dummy_messages(): for i in range(1,5): with st.chat_message("user"): st.markdown(f"消息 {i}") time.sleep(1) # 先渲染聊天消息(不管是历史还是实时生成的,都放在占位符前面) # 在这里创建Spinner的占位,位置就在聊天区下面、输入框上面 spinner_placeholder = st.empty() # 把Spinner放到这个占位里,同时执行任务 with spinner_placeholder.spinner("执行计划中..."): dummy_messages() # 任务做完后可以清空占位(可选,Spinner也会自己消失) spinner_placeholder.empty() # 聊天输入框示例 user_input = st.chat_input("输入消息...")
为啥这么管用
st.empty()相当于提前在页面上留了个“固定位置的坑”,新生成的聊天消息只会往这个坑的上方添加,不会改变坑的位置- 把Spinner放在这个坑里,不管上面生成多少条消息,Spinner都稳稳待在底部,不会被顶出视野
- 任务结束后,要么让Spinner自动消失,要么手动调用
empty()把占位清掉
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

