外观
Streamlit安装与入门
Streamlit
介绍
Streamlit 是一个用于快速构建和分享数据科学、机器学习(ML)Web 应用的 Python 库。它的核心特点是简单易用,允许开发者通过纯 Python 代码快速将数据脚本转换为交互式 Web 应用,无需前端开发经验(如 HTML、CSS、JavaScript 等)。适用场景:
- 快速原型开发(数据工具、ML 模型演示)
- 数据探索与可视化报告
- 内部工具或团队协作应用
- 教学演示、学术分享等
安装
shell
pip install streamlit打开示例网页:streamlit hello
运行代码:streamlit run a.py 。运行后,刷新网页可以看到新内容
基础API
基础布局与文本展示
st.title("标题"):一级标题st.header("小标题"):二级标题st.subheader("子标题"):三级标题st.text("普通文本"):纯文本st.markdown("**Markdown 文本**"):支持 Markdown 格式(如加粗、列表、链接等)st.caption("说明文字"):小标题 / 注释(字体较小)st.code("print('代码块')", language="python"):代码块(支持语法高亮)st.write:智能展示多种内容(万能函数)
交互组件
python
import streamlit as st
# 文本输入
name = st.text_input("请输入姓名", placeholder="例如:张三") # 返回字符串
# 数字输入
age = st.number_input(
"请输入年龄", min_value=0, max_value=120, value=18
) # 返回整数/浮点数
# 滑块
score = st.slider("评分", min_value=0, max_value=10, value=5, step=1) # 返回数值
# 复选框
agree = st.checkbox("同意条款") # 返回布尔值(True/False)
# 单选框 / 下拉选择
# 单选框
gender = st.radio("性别", options=["男", "女", "保密"]) # 返回选中的选项
# 下拉选择
city = st.selectbox("城市", options=["北京", "上海", "广州"])
# 多选框
hobbies = st.multiselect("爱好", options=["阅读", "运动", "游戏"]) # 返回选中选项的列表
# 按钮
if st.button("点击提交"):
st.success("提交成功!") # 点击后执行操作
# 文件上传
file = st.file_uploader(
"上传文件", type=["csv", "xlsx"]
) # 返回上传的文件对象(需结合 Pandas 读取)数据与图表展示
python
### 数据表格
import pandas as pd
df = pd.DataFrame({"姓名": ["张三", "李四"], "年龄": [20, 25]})
st.dataframe(df) # 交互式表格(支持排序、筛选)
st.table(df) # 静态表格(不支持交互)
### 图表展示(支持 Matplotlib、Plotly、Altair 等)
import matplotlib.pyplot as plt
import seaborn as sns
# Matplotlib 图表
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 1])
st.pyplot(fig) # 显示 Matplotlib 图表
# Seaborn 图表(基于 Matplotlib)
fig = sns.barplot(x=["A", "B"], y=[10, 20]).get_figure()
st.pyplot(fig)
# Plotly 交互式图表
import plotly.express as px
fig = px.scatter(df, x="年龄", y="分数") # 假设 df 有"分数"列
st.plotly_chart(fig) # 显示 Plotly 图表(支持缩放、悬停)
### 数据统计
st.metric(label="温度", value="25°C", delta="+2°C") # 显示指标卡(带变化量)布局与状态API
布局与容器:用于组织页面结构(如分栏、折叠面板等)。
python
import streamlit as st
# 分栏
col1, col2 = st.columns(2) # 分成 2 列
with col1:
st.text("第一列内容")
with col2:
st.text("第二列内容")
# 折叠面板
with st.expander("点击展开详情"):
st.write("隐藏的详细内容...")
# 侧边栏
# 所有组件放在 st.sidebar 中会显示在侧边栏
st.sidebar.text_input("侧边栏输入")
st.sidebar.button("侧边栏按钮")
# 容器(灵活控制渲染顺序)
container = st.container()
container.write("容器内内容 1")
st.write("容器外内容")
container.write("容器内内容 2") # 会跟在"内容 1"后面状态与反馈:用于管理应用状态或向用户反馈操作结果。
python
### 状态管理(st.session_state,跨组件共享数据)
# 初始化状态
if "count" not in st.session_state:
st.session_state.count = 0
# 点击按钮更新计数
if st.button("+1"):
st.session_state.count += 1
st.write(f"当前计数:{st.session_state.count}")
### 反馈提示
st.success("操作成功!") # 绿色成功提示
st.error("操作失败!") # 红色错误提示
st.warning("注意:即将超时") # 黄色警告提示
st.info("信息:请上传文件") # 蓝色信息提示
### 进度条与 spinner
import time
# 进度条
progress_bar = st.progress(0)
for i in range(100):
time.sleep(0.05)
progress_bar.progress(i + 1)
# 加载动画
with st.spinner("正在处理..."):
time.sleep(3) # 模拟耗时操作
st.success("处理完成")其他常用功能API
- 页面配置(需放在代码最顶部)
python
st.set_page_config(
page_title="我的应用", # 浏览器标签页标题
page_icon="📊", # 图标(emoji 或图片路径)
layout="wide" # 宽屏模式(默认"centered")
)- 缓存(
@st.cache_data,加速重复计算):
python
@st.cache_data # 缓存函数结果,避免重复计算
def load_data(file):
return pd.read_csv(file)
df = load_data("large_file.csv") # 第一次加载后缓存,后续直接读取聊天API
st.chat_message(展示聊天消息)
- 用于展示聊天消息气泡,支持区分用户(
"user")和助手("assistant")角色
st.chat_input(获取用户输入)
- 配套的输入框组件,专门用于聊天场景,返回用户输入的字符串
- 会固定显示在页面底部(类似聊天软件的输入框),不受其他组件的布局影响(即使写在代码中间,也会渲染在底部)
st.session_state(保存对话历史)
- 聊天应用需要保存历史消息,
st.session_state是全局状态容器,可用于存储对话列表。
python
import streamlit as st
# 展示用户消息
with st.chat_message("user"):
st.write("你好!") # 用户发送的内容
# 展示助手消息
with st.chat_message("assistant"):
st.write("你好!有什么可以帮你的吗?") # 助手回复的内容
### 输入
user_input = st.chat_input("请输入消息...") # 输入框占位符
if user_input: # 当用户输入内容后
st.write(f"你输入了:{user_input}")
### 对话历史
# 首次运行时初始化对话历史(列表中每个元素是字典,包含角色和内容)
if "messages" not in st.session_state:
st.session_state.messages = []