Python Streamlit入门

Python Streamlit入门

2026年9月16日·#已弃用Python/Streamlit/Web开发·1463 字 7 分钟
浏览量加载中...
AI 摘要

Streamlit基础概念、常用API、页面构建、运行方式及核心知识点

一、什么是Streamlit#

Streamlit是一个开源的Python库,专为数据工程师及机器学习工程师设计,用来快速基于Python代码构建交互式的web网站(无需掌握前端技术)。

  • 官方网站:https://streamlit.io
  • 核心优势:用纯Python代码就能构建美观的Web应用

二、Streamlit使用步骤#

1. 安装Streamlit#

Terminal window
pip install streamlit

2. 创建Python文件并引入模块#

import streamlit as st

3. 基于Streamlit API构建页面#

使用Streamlit提供的各种API来构建页面内容。

4. 运行程序#

Terminal window
streamlit run xxxx.py

运行后会自动打开浏览器访问 http://localhost:8501


三、Streamlit常用API#

文本与标题#

API说明示例
st.title()页面主标题st.title("我的应用")
st.header()二级标题st.header("章节标题")
st.subheader()三级标题st.subheader("小节标题")
st.write()通用写入方法,支持多种类型st.write("Hello World")
st.markdown()支持Markdown语法st.markdown("**加粗**")
st.text()纯文本输出st.text("纯文本内容")
st.code()代码块展示st.code("print('hello')")
st.caption()小字说明st.caption("这是说明文字")

数据展示#

API说明示例
st.image()显示图片st.image("cat.jpg")
st.table()静态表格st.table(data)
st.dataframe()可交互数据框st.dataframe(df)
st.json()显示JSON数据st.json(data)
st.metric()指标卡片st.metric("温度", "26°C")

图表展示#

API说明
st.line_chart()折线图
st.bar_chart()柱状图
st.area_chart()面积图
st.scatter_chart()散点图
st.pyplot()Matplotlib图表
st.plotly_chart()Plotly图表

交互组件#

API说明示例
st.button()按钮st.button("点击我")
st.text_input()文本输入框st.text_input("请输入姓名")
st.text_area()多行文本区域st.text_area("请输入内容")
st.number_input()数字输入st.number_input("请输入年龄")
st.selectbox()下拉选择框st.selectbox("选择", ["A","B"])
st.multiselect()多选下拉st.multiselect("多选", ["A","B"])
st.slider()滑块st.slider("选择", 0, 100)
st.date_input()日期选择st.date_input("选择日期")
st.time_input()时间选择st.time_input("选择时间")
st.file_uploader()文件上传st.file_uploader("上传文件")
st.color_picker()颜色选择器st.color_picker("选择颜色")
st.checkbox()复选框st.checkbox("同意协议")
st.radio()单选按钮st.radio("选择", ["A","B"])

布局与容器#

API说明
st.sidebar侧边栏容器
st.columns()多列布局
st.tabs()标签页布局
st.expander()可展开区域
st.container()容器
st.divider()分隔线
st.empty()空占位符

状态与反馈#

API说明
st.success()成功提示(绿色)
st.error()错误提示(红色)
st.warning()警告提示(黄色)
st.info()信息提示(蓝色)
st.spinner()加载动画
st.progress()进度条
st.toast()临时提示消息
st.balloons()气球动画(庆祝效果)

四、入门示例#

import streamlit as st
# 标题
st.title("AI智能伴侣")
# 段落
st.write("这是一个基于Streamlit构建的AI对话应用")
# 图片
st.image("cat.jpg")
# 分隔线
st.divider()
# 表格
data = {
"姓名": ["王林", "李慕婉", "贝罗"],
"学号": ["20230001", "20230002", "20230003"],
"语文": [80, 90, 85],
"数学": [87, 92, 87],
"英语": [90, 85, 90]
}
st.table(data)
# 输入框
name = st.text_input("请输入你的名字")
if name:
st.write(f"你好,{name}!")
# 按钮
if st.button("点击我"):
st.success("按钮已点击!")

五、Streamlit运行机制#

脚本从上到下执行#

Streamlit程序从第一行开始,从上到下依次执行。

每次交互重新运行#

当用户与页面交互(点击按钮、输入内容等),整个脚本会从头重新执行

# 这是Streamlit的重要特性
# 每次交互都会重新运行整个脚本
import streamlit as st
st.write("这段文字每次都会显示")
# 按钮点击后,整个脚本重新运行
if st.button("点击"):
st.write("按钮被点击了!") # 只有点击后才显示

缓存机制#

为了避免重复计算,Streamlit提供了缓存装饰器:

import streamlit as st
import time
# 使用缓存,避免重复计算
@st.cache_data
def expensive_computation(a, b):
time.sleep(2) # 模拟耗时计算
return a + b
# 第一次调用会执行计算,之后直接返回缓存结果
result = expensive_computation(1, 2)
st.write(f"结果: {result}")
缓存装饰器适用场景
@st.cache_data缓存数据(返回可序列化对象)
@st.cache_resource缓存资源(如数据库连接、ML模型)

六、多列布局#

import streamlit as st
# 创建两列布局
col1, col2 = st.columns(2)
# 在第一列中放置内容
with col1:
st.header("左列")
st.write("这是左边的内容")
# 在第二列中放置内容
with col2:
st.header("右列")
st.write("这是右边的内容")

不等宽列布局#

# 按比例分配列宽
col1, col2, col3 = st.columns([1, 2, 1]) # 1:2:1比例

七、侧边栏#

import streamlit as st
# 侧边栏内容
with st.sidebar:
st.header("设置")
model = st.selectbox("选择模型", ["GPT-3.5", "GPT-4", "DeepSeek"])
temperature = st.slider("温度", 0.0, 2.0, 0.7)
api_key = st.text_input("API Key", type="password")
# 主区域内容
st.title("AI对话助手")
st.write(f"当前模型: {model}")

八、会话状态(Session State)#

Streamlit本身是无状态的,但可以通过 st.session_state 在多次交互间保持状态:

import streamlit as st
# 初始化会话状态
if "messages" not in st.session_state:
st.session_state.messages = []
# 显示历史消息
for msg in st.session_state.messages:
with st.chat_message(msg["role"]):
st.write(msg["content"])
# 输入框
if prompt := st.chat_input("请输入你的问题"):
# 显示用户消息
with st.chat_message("user"):
st.write(prompt)
# 添加到历史记录
st.session_state.messages.append({"role": "user", "content": prompt})
# 模拟AI回复
response = f"这是AI对'{prompt}'的回复"
with st.chat_message("assistant"):
st.write(response)
st.session_state.messages.append({"role": "assistant", "content": response})

九、文件上传#

import streamlit as st
uploaded_file = st.file_uploader("选择文件", type=["csv", "txt", "pdf"])
if uploaded_file is not None:
# 读取文件内容
content = uploaded_file.read()
st.write("文件内容:")
st.write(content.decode("utf-8"))

十、项目结构建议#

my_ai_app/
├── app.py # 主应用文件
├── requirements.txt # 依赖包列表
├── .streamlit/
│ └── config.toml # Streamlit配置
├── pages/ # 多页面应用
│ ├── 1_对话.py
│ └── 2_设置.py
├── utils/ # 工具函数
│ └── ai_chat.py
└── static/ # 静态资源
└── images/

多页面应用#

在项目根目录创建 pages/ 文件夹,每个 .py 文件就是一个子页面,文件名决定了页面顺序和标题。


总结口诀#

  • Streamlit:纯Python写网页,无需前端知识
  • 安装pip install streamlit 一键安装
  • 运行streamlit run xxx.py 启动应用
  • 核心API:write/title/button/input,常用组件记心间
  • 运行机制:脚本从上到下跑,交互重跑是特点
  • 缓存:cache_data缓存数据,避免重复计算
  • 会话状态:session_state保持状态,对话历史存里面
  • 侧边栏:sidebar放设置,主区域放内容

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# Ajax2# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc3# CSS6# DeepSeek6# deepseek2# DELETE1# Docker1# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML6# HTTP5# ImageManager1# Java23# java13# JavaScript5# JDBC3# JSON2# JUnit1# LangChain25# Logback1# Maven6# Muse Spark1# Mybatis1# MyBatis4# MySQL28# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python65# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot11# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue7# Waline3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端32# 动态1# 动漫1# 包1# 单词2# 博客7# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 对象1# 导航栏1# 工具2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程1# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常92# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试1# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]