You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:04:56