国庆节10月1日
--


用纯 Python 快速搭建交互式网页:Streamlit 的三步使用流程与常用组件速查

Streamlit 是一个开源的 Python 库,专为数据工程师及机器学习工程师设计,用来快速基于 Python 代码构建交互式的 web 网站(无需掌握前端技术)。
官方网站:https://streamlit.io
也就是说:不用写 HTML/CSS/JavaScript,只写 Python,就能得到一个能输入、能点击、能展示图表和媒体的网页。这对做 AI 应用的演示界面特别合适。
1# 1. 安装2pip install streamlit1# 2. 在 python 文件中引入 streamlit 模块, 基于提供的 API 构建 Web 应用2import streamlit as st3st.title("AI智能伴侣")1# 3. 运行程序(注意是 streamlit run,不是 python xxx.py)2streamlit run 02.\ streamlit入门.py必须用 streamlit run 文件名.py 启动。直接 python xxx.py 只会执行一遍代码,不会启动网页服务。
1import streamlit as st2
3st.set_page_config(4 page_title="Streamlit入门", # 浏览器标签页标题5 page_icon="🧊", # 标签页图标6 layout="wide", # 布局: wide(宽屏) / centered(居中)7 initial_sidebar_state="expanded",# 侧边栏状态: expanded / collapsed / auto8 menu_items={} # 右上角菜单9)| 组件 | 作用 |
|---|---|
st.title("...") | 大标题 |
st.header("...") | 一级标题 |
st.subheader("...") | 二级标题 |
st.write("...") | 输出文本,也支持直接写 Markdown |
st.text("...") | 输出纯文本(不解析 Markdown) |
st.divider() | 分隔线 |
| 组件 | 作用 |
|---|---|
st.image("resources/cat.jpg") | 显示图片 |
st.audio("resources/news.mp3") | 音频播放器 |
st.video("resources/news.mp4") | 视频播放器 |
st.logo("resources/logo.png") | 页面 Logo |
st.table(数据) | 表格(字典或 DataFrame) |
| 组件 | 作用 |
|---|---|
st.text_input("请输入姓名") | 单行文本输入框 |
st.text_input("请输入密码", type="password") | 密码输入框(输入内容显示为圆点) |
st.text_area("性格") | 多行文本输入框 |
st.radio("性别", ["男", "女", "未知"], index=2) | 单选按钮 |
st.button("按钮文字") | 按钮,返回 True/False |
| 组件 | 作用 |
|---|---|
with st.sidebar: | 把内容放到左侧边栏里 |
st.columns([4, 1]) | 一行分成多列 |
st.chat_message("user") | 聊天气泡(user / assistant) |
st.chat_input("请输入...") | 底部聊天输入框 |
st.empty() | 占位组件,可反复覆盖内容(流式输出用) |
st.error("...") | 红色错误提示 |
st.rerun() | 立刻重新运行整个脚本、刷新页面 |
1import streamlit as st2
3# 设置页面的配置项4st.set_page_config(5 page_title="Streamlit入门",6 page_icon="🧊",7 layout="wide", # 布局8 initial_sidebar_state="expanded", # 控制的是侧边栏的状态9 menu_items={}10)11
12# 大标题 / 标题13st.title("Streamlit 入门演示")14st.header("Streamlit 一级标题")15st.subheader("Streamlit 二级标题")16
17# 段落文字18st.write("布偶猫,被誉为“猫中仙女”,以其优雅的外表和温顺的性格成为最受欢迎的宠物猫之一。")19
20# 图片 / 音频 / 视频 / Logo21st.image("resources/cat.jpg")22st.audio("resources/news.mp3")23st.video("resources/news.mp4")24st.logo("resources/logo.png")25
26# 表格27student_data = {28 "姓名": ["王林", "李慕婉", "贝罗", "莫厉海", "石萧"],29 "学号": ["20260001", "20260002", "20260003", "20260004", "20260005"],30 "语文": [98, 90, 59, 29, 80],31 "数学": [88, 78, 65, 70, 39],32 "英语": [99, 89, 87, 59, 62],33 "总分": [285, 257, 211, 158, 181]34}35st.table(student_data)36
37# 输入框38name = st.text_input("请输入姓名")39st.write(f"您输入的姓名为: {name}")40
41# 密码输入框42password = st.text_input("请输入密码", type="password")43st.write(f"您输入的密码为: {password}")44
45# 单选按钮(index=2 表示默认选中第 3 个选项)46gender = st.radio("请输入您的性别", ["男", "女", "未知"], index=2)47st.write(f"您的性别为: {gender}")st.image("resources/cat.jpg") 用的是相对路径,相对于你运行 streamlit run 时所在的目录。写错路径就会报 “No such file or directory”。
Streamlit 的交互模型是:用户每做一次交互(点按钮、输入内容),整个脚本就会从头到尾重新执行一遍,然后重新渲染页面。
这带来一个直接后果:普通的 Python 变量在重跑时会丢失,所以聊天记录这类需要”记住”的数据必须放进 st.session_state——这正是 会话记忆 那一节要解决的问题。
| 题目 | 答案 |
|---|---|
| 什么是 Streamlit | 一个用于快速基于 python 代码构建 web 网页的 python 库(数据科学及机器学习领域) |
| Streamlit 的使用步骤 | 安装(pip install streamlit)→ 基于 streamlit 中的 api 构建页面 → 运行(streamlit run xxx.py) |
pip install streamlit;运行:streamlit run xxx.pypython xxx.py 启动?因为它是 Web 应用,要由 streamlit 起服务st.set_page_config(page_title=..., page_icon=..., layout="wide", initial_sidebar_state="expanded")st.title() / st.header() / st.subheader()st.write()(支持 Markdown)、st.text()(纯文本)、st.divider()(分隔线)st.image() / st.audio()(音频)/ st.video()(视频)/ st.logo()(Logo)st.table(数据字典)st.text_input()(单行文本)、st.text_area()(多行文本)、st.text_input()(密码框,加 type="password")、st.radio()(单选框)2-1 做一个展示页 页面包含:大标题、一级标题、一段文字、分隔线、一个表格(三人三列,含总分行)。运行后能正常看到页面。
一级 · 思路:从大到小摆:标题 → 文字 → 分隔 → 表格
二级 · 方法:st.title / st.header / st.write / st.divider / st.table
三级 · 骨架:表格数据用字典表示,键是列名、值是列表
1import streamlit as st2
3st.title("我的展示页")4st.header("一、成绩表格")5st.write("下面是一个成绩表格,最后一列是总分。")6st.divider()7
8data = {9 "姓名": ["王林", "李慕婉", "贝罗"],10 "语文": [98, 90, 59],11 "数学": [88, 78, 65],12 "英语": [99, 89, 87],13 "总分": [285, 257, 211],14}15st.table(data)2-2 输入组件与回显 放三个输入组件(姓名、密码、性别单选),把用户输入的内容回显到页面上。
一级 · 思路:每个组件都会”返回”用户输入的值,存进变量再显示
二级 · 方法:st.text_input(密码加 type="password")、st.radio
三级 · 骨架:gender = st.radio("性别", ["男","女","未知"], index=____)
1import streamlit as st2
3name = st.text_input("请输入姓名")4password = st.text_input("请输入密码", type="password")5gender = st.radio("请输入您的性别", ["男", "女", "未知"], index=2)6
7st.divider()8st.write(f"您输入的姓名为: {name}")9st.write(f"您输入的密码为: {password}")10st.write(f"您的性别为: {gender}")2-3 页面配置与媒体 给页面配置标题和图标、加 Logo,并放一张图片、一段音频、一段视频(用课程 resources 目录里的文件)。
一级 · 思路:页面配置要放在所有组件之前;媒体组件直接给文件路径
二级 · 方法:st.set_page_config / st.logo / st.image / st.audio / st.video
三级 · 骨架:路径相对于运行命令时所在的目录,写错会报找不到文件
1import streamlit as st2
3st.set_page_config(page_title="我的第一个页面", page_icon="🧊", layout="wide")4
5st.title("页面配置与媒体演示")6st.logo("resources/logo.png")7
8st.image("resources/cat.jpg")9st.audio("resources/news.mp3")10st.video("resources/news.mp4")如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"生活不是等待暴风雨过去,而是学会在雨中跳舞。"—— 塞维涅夫人


