Streamlit入门
1、Streamlit是什么
Streamlit 是一个用于快速构建数据应用的开源 Python 库,由 Streamlit 公司开发并维护。它极大地简化了从数据脚本到交互式 Web 应用的转化过程,让开发者无需具备前端开发的专业知识,就能轻松创建出美观、实用的交互式应用。
Streamlit≈前端框架+后端框架+云服务器
2、基本使用方法
基本组件
1、pip install streamlit
2、测试是否安装成功:streamlit hello(一个示例网页)
如果没有立即自动跳转到网页,而是像这样:
则再在Email行输入回车即可
3、import streamlit as st
4、运行自定义网页,streamlit run .\test1.py(streamlit run + Python脚本的路径)
5、终止服务器,按ctrl+C即可
6、点击网页右上角的rerun,让代码改动在网页上生效;
Always rerun可以一边修改代码,一边生效(要手动保存后)。
import streamlit as st
import pandas as pd# 可以传markdown语法的参数
st.write("### 新年快乐")# 省略.write也可以直接打印
123a=10
a[11,22,33]{"a":"1","b":"2","c":3}# 大标题
st.title("我的个人网站💡")# 图片
st.image("E:\streamlit\source\image.png",width=300)# 表格
data={ #创建一个包含学生信息的字典(键是列名)'姓名': ['张三', '李四', '王五'],'年龄': [20, 21, 22],'成绩': [85, 90, 78]
}df=pd.DataFrame(data) #使用字典创建DataFramest.dataframe(df) #显示表格,直接写df也可以————交互式表格
dfst.divider() #分割线st.table(df) #非交互式静态表格
import streamlit as st# 文字输入
name = st.text_input("请输入你的名字:")
if name:st.write(f"你好,{name}")st.divider()# 将text_input的type值定为password,就是输入密码了
password=st.text_input("请输入密码:",type="password")st.divider()# 输入长文本,要用到大区域,可以手动调节文本框的长度
paragraph = st.text_area("请输入你的自我介绍:")st.divider()# 数字输入
age=st.number_input("请输入你的年龄:",value=20,min_value=0,max_value=150,step=1)
st.write(f"你的年龄是:{age}岁")st.divider()# 勾选框
checked = st.checkbox("我同意以上条款") # 勾选了就返回true,否则是false
if checked:st.write("感谢您的同意!")st.divider()# 按钮
submitted = st.button("提交")
if submitted:st.write("提交成功!")
streamlit什么时候会重新运行整个文件呢?
1、对源代码进行修改后
2、用户与组件进行了交互后(比如输入文本并回车,点击了按钮,拖动了滑块),
文件就会从头到尾重新运行,从而对里面的一些变量值进行更新

注意:使用number_input时,将step设置为1,就限制了输入值最终只能是整数

number_input的另一个参数:


import streamlit as st# 单选按钮
gender = st.radio("你的性别是什么", ["男性","女性","跨性别"], #options选项:可迭代对象,列表或元组index=None) #index设置初始选中的选项索引,默认为0,设置等于None值时无初始设置
if gender:st.write(f"你选择的性别是{gender}")st.divider()# 单选框
contact = st.selectbox("你希望通过什么方式联系?",["微信","QQ","邮箱","电话","其它"])
st.write(f"好的,我们会通过{contact}联系你")st.divider()# 多选框
fruits = st.multiselect("你喜欢的水果是什么?",["苹果","西瓜","橙子","香蕉"]) #返回的是选中元素组成的列表
for fruit in fruits:st.write(f"你选择的水果是{fruit}")st.divider()# 滑块(通过拖动来选择数字)
height = st.slider("你的身高是多少厘米?",value=160.0,min_value=100.0,max_value=230.0,step=0.5)
st.write(f"你的身高是{height}厘米")st.divider()# 文件上传器
uploaded_file = st.file_uploader("请上传你的文件",type=["py"]) #type参数限制了可以上传的文件类型,"py"表示python代码文件
## 如果用户没有上传文件,uploaded_file 的值为 None;如果用户上传了文件,uploaded_file 是 UploadedFile 类的一个实例,该实例包含了上传文件的相关信息,如文件名、文件内容等。
if uploaded_file:st.write(f"你上传的文件是{uploaded_file.name}")st.write(f"文件内容如下:{uploaded_file.read().decode('utf_8')}")
## uploaded_file.read() 是 UploadedFile 类的一个方法,用于读取上传文件的内容。该方法返回一个字节字符串(bytes 类型),表示文件的二进制内容。
## 由于 uploaded_file.read() 返回的是字节字符串,如果文件是文本文件,在显示时可能需要进行解码操作,例如使用 uploaded_file.read().decode('utf-8') 将字节字符串解码为 Unicode 字符串,以确保中文等非 ASCII 字符能够正确显示。
布局
侧边栏和列
import streamlit as st# 侧边栏
with st.sidebar:name = st.text_input("请输入你的名字:")if name:st.write(f"你好,{name}")# 多列布局
# (column1,column2,column3) = st.columns(3) 将布局划分为三列,并且将这三列分别赋值给变量 column1、column2 和 column3
(column1,column2,column3) = st.columns([1,2,1]) #当st.columns()的参数是一个数字列表时,列表中的每个元素代表对应列的相对宽度# 第一列里有什么(有缩进的才是):
with column1:password=st.text_input("请输入密码:",type="password")with column2:paragraph = st.text_area("请输入你的自我介绍:")with column3:age=st.number_input("请输入你的年龄:",value=20,min_value=0,max_value=150,step=1)st.write(f"你的年龄是:{age}岁")st.divider()checked = st.checkbox("我同意以上条款")
if checked:st.write("感谢您的同意!")st.divider()submitted = st.button("提交")
if submitted:st.write("提交成功!")
选项卡和折叠展开
import streamlit as st# 创建标签页界面的函数。它接收一个列表作为参数,列表中的每个元素代表一个标签页的标题。
# 返回值是一个包含多个标签页对象的元组
(tab1,tab2,tab3) = st.tabs(["性别","联系方式","喜好水果"])with tab1:gender = st.radio("你的性别是什么", ["男性","女性","跨性别"], index=None) if gender:st.write(f"你选择的性别是{gender}")with tab2:contact = st.selectbox("你希望通过什么方式联系?",["微信","QQ","邮箱","电话","其它"])st.write(f"好的,我们会通过{contact}联系你")with tab3:fruits = st.multiselect("你喜欢的水果是什么?",["苹果","西瓜","橙子","香蕉"]) for fruit in fruits:st.write(f"你选择的水果是{fruit}")st.divider()# 折叠展开组件:展示非关键信息,平时折叠,需要时展开,提高页面上的信息展示效率
# with st.expander("展开区域标题"):
with st.expander("身高信息"):height = st.slider("你的身高是多少厘米?",value=160.0,min_value=100.0,max_value=230.0,step=0.5)st.write(f"你的身高是{height}厘米")st.divider()uploaded_file = st.file_uploader("请上传你的文件",type=["py"])
if uploaded_file:st.write(f"你上传的文件是{uploaded_file.name}")st.write(f"文件内容如下:{uploaded_file.read().decode('utf_8')}")
会话状态
当我们打开一个新的浏览器标签,进入到这个网页,就是一个新的会话。关闭标签,会话才结束。
会话状态可以保留和共享用户会话中的变量,只要用户没有关闭标签,会话中的状态就可以被保留。
import streamlit as stif "a" not in st.session_state: # 如果a还没在会话状态中st.session_state.a=0 # 则把a加入会话状态,并赋值为0clicked = st.button("加1")
if clicked:st.session_state.a += 1
st.write(st.session_state.a) print(st.session_state) #{'a': 10}
多页面网站
把多个页面归在同一个网站,而不是每个页面单独一个网站
1、选择其中一个页面作为主页(比如page1.py)
2、把剩下的页面移动到pages文件夹下,必须叫pages
3、streamlit run page1.py即可

相关文章:
Streamlit入门
1、Streamlit是什么 Streamlit 是一个用于快速构建数据应用的开源 Python 库,由 Streamlit 公司开发并维护。它极大地简化了从数据脚本到交互式 Web 应用的转化过程,让开发者无需具备前端开发的专业知识,就能轻松创建出美观、实用的交互式应…...
列表(列表是什么)
你将学习列表是什么以及如何使用列表元素。列表让你能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素。 列表是新手可直接使用的最强大的Python功能之一,它融合了众多重要的编程概念。 列表是什么 列表 由一系列…...
笔记本搭配显示器
笔记本:2022款拯救者Y9000P,显卡RTX3060,分辨率2560*1600,刷新率:165Hz,无DP1.4口 显示器:2024款R27Q,27存,分辨率2560*1600,刷新率:165Hz &…...
基于排队理论的物联网发布/订阅通信系统建模与优化
论文标题 英文标题:Queuing Theory-Based Modeling and Optimization of a Publish/Subscribe IoT Communication System 中文标题:基于排队理论的物联网发布/订阅通信系统建模与优化 作者信息 Franc Pouhela Anthony Kiggundu Hans D. Schotten …...
指针(C语言)从0到1掌握指针,为后续学习c++打下基础
目录 一,指针 二,内存地址和指针 1,什么是内存地址 2,指针在不同系统下所占内存 三,指针的声明和初始化以及类型 1,指针的声明 2,指针 的初始化 1, 初始化方式优点及适用场景 4,指针的声明初始化类型…...
实验八 JSP访问数据库
实验八 JSP访问数据库 目的: 1、熟悉JDBC的数据库访问模式。 2、掌握使用My SQL数据库的使用 实验要求: 1、通过JDBC访问mysql数据,实现增删改查功能的实现 2、要求提交实验报告,将代码和实验结果页面截图放入报告中 实验过程&a…...
Day31-【AI思考】-关键支点识别与战略聚焦框架
文章目录 关键支点识别与战略聚焦框架**第一步:支点目标四维定位法****第二步:支点验证里程碑设计****第三步:目标网络重构方案****第四步:动态监控仪表盘** 执行工具箱核心心法 关键支点识别与战略聚焦框架 让思想碎片重焕生机的…...
DeepSeek与其他大模型相比
DeepSeek与其他大模型相比 与GPT-4对比 性能方面 推理速度:DeepSeek在解决复杂的数学、物理和逻辑推理问题方面速度惊人,是ChatGPT的两倍。“幻觉”现象:在处理需要网络信息检索的任务时,DeepSeek的“幻觉”现象似乎比ChatGPT更少。创意任务:ChatGPT在创意性任务,如创作…...
在深度Linux (Deepin) 20中安装Nvidia驱动
文章创作不易,麻烦大家点赞关注收藏一键三连。 在Deepin上面跑Tensorflow, pytorch等人工智能框架不是一件容易的事情。特别是如果你要使用GPU,就得有nvidia的驱动。默认情况下Deepin系统自带的是nouveau开源驱动。这是没办法用tensorflow的。下面内容是…...
“LoRA技术中参数初始化策略:为何A参数采用正态分布而B参数初始化为0”
在LoRA(Low-Rank Adaptation)中,参数A和B的初始化策略是经过精心设计的,以确保模型训练的稳定性和有效性。具体来说,参数A通常被初始化为正态分布,而参数B则初始化为0。这样的设计有以下几个优点࿱…...
C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】
1. 题目描述 力扣在线OJ题目 给定两个数组,编写一个函数来计算它们的交集。 示例: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 输入:nums1 [4,9,5], nums2 [9,4,9,8,4] 输出:[9,4] 2. 思路 直接暴力…...
理解动手学深度学习的自编包d2l
跟着李沐的《动手学深度学习-PyTorch版》入门Python编程和Pytorch框架,以前是重度Matlab用户,对于Python里的各种包很不习惯。特别是,本书还自己做了一个名为d2l包,有几个问题很是困惑。今天终于弄明白了,写在这里&…...
RK3568使用opencv(使用摄像头捕获图像数据显示)
文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结 二、代码实现 一、opencv相关的类 1. cv::VideoCapture cv::VideoCapture 是 OpenCV 中用于视频捕捉的类,常用于从摄像头、视频文件、或者…...
OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境
以下是在OpenEuler系统上搭建PostgreSQL高可用数据环境的一般步骤,通常可以使用流复制(Streaming Replication)或基于Patroni等工具来实现高可用,以下以流复制为例: 安装PostgreSQL 配置软件源:可以使用O…...
数学平均数应用
给定一个长度为 n 的数组 a。在一次操作中,你可以从索引 2 到 n−1中选择一个索引i,然后执行以下两个操作之一: 将 a[i−1] 减少 1,同时将 a[i1] 增加 1。 将 a[i1] 减少 1,同时将 a[i−1] 增加 1。 在每次操作后&…...
元旦和春节取名的历史变迁
在中国漫长的历史长河中的春节,真要追溯起来也只有一百多年历史——是从晚清时期才逐渐出现在国人的生活里的,而且那时不叫“春节”而叫“元旦”。只不过随着历史的发展过程,“过年”这个名词也一直在演变,直至1949年最终才定下来…...
USB鼠标的数据格式
USB鼠标的数据格式由HID(Human Interface Device)协议定义,通常包含3个字节的标准数据,具体格式如下: 字节内容描述第1字节按键状态Bit 0: 左键按下(1)<br>Bit 1: 右键按下(1…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.27 线性代数王国:矩阵分解实战指南
1.27 线性代数王国:矩阵分解实战指南 #mermaid-svg-JWrp2JAP9qkdS2A7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JWrp2JAP9qkdS2A7 .error-icon{fill:#552222;}#mermaid-svg-JWrp2JAP9qkdS2A7 .erro…...
Kafka常见问题之 java.io.IOException: Disk error when trying to write to log
文章目录 Kafka常见问题之 java.io.IOException: Disk error when trying to write to log1. 问题概述2. 问题排查方向(1)磁盘空间不足(2)磁盘 I/O 故障(3)Kafka 日志文件损坏(4)Kaf…...
libOnvif通过组播不能发现相机
使用libOnvif库OnvifDiscoveryClient类, auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误: end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…...
ReactPy虚拟DOM终极指南:Python如何高效更新网页内容
ReactPy虚拟DOM终极指南:Python如何高效更新网页内容 【免费下载链接】reactpy Its React, but in Python 项目地址: https://gitcode.com/gh_mirrors/re/reactpy ReactPy作为Python领域的创新框架,让开发者能够使用Python语法构建交互式Web界面&…...
CS-Notes:从汇编到现代编程语言的系统化学习路径
CS-Notes:从汇编到现代编程语言的系统化学习路径 【免费下载链接】CS-Notes :books: 编程语言语法基础与工程实践,JavaScript | Java | Python | Go | Rust | CPP | Swift 项目地址: https://gitcode.com/gh_mirrors/csno/CS-Notes 掌握多门编程语…...
从零到一:构建智能AI代理的提示工程实战指南
从零到一:构建智能AI代理的提示工程实战指南 【免费下载链接】Prompt-Engineering-Guide dair-ai/Prompt-Engineering-Guide: 是一个用于指导对话人工智能开发的文档。适合用于学习对话人工智能开发和自然语言处理。特点是提供了详细的指南和参考资料,涵…...
3分钟彻底解决Windows安装错误2502/2503:AtlasOS一键修复方案揭秘 [特殊字符]
3分钟彻底解决Windows安装错误2502/2503:AtlasOS一键修复方案揭秘 🚀 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.…...
别再让数据‘偏心’了:用Python给图像数据做零均值化预处理(以PyTorch为例)
别再让数据‘偏心’了:用Python给图像数据做零均值化预处理(以PyTorch为例) 当你第一次训练图像分类模型时,可能会遇到一个奇怪的现象:损失函数下降得特别慢,甚至反复震荡。这很可能是因为你的数据在"…...
告别字符串截取!用正则表达式re模块精准提取HTML表格数据的避坑指南
告别字符串截取!用正则表达式re模块精准提取HTML表格数据的避坑指南 在数据抓取的世界里,HTML解析就像一场永无止境的猫鼠游戏。每当开发者费尽心思用字符串截取搞定一个网站,前端工程师稍微调整下标签结构,整个爬虫就崩溃了。这种…...
Uvicorn ASGI服务器部署架构深度解析:从单机到生产集群的完整指南
Uvicorn ASGI服务器部署架构深度解析:从单机到生产集群的完整指南 【免费下载链接】uvicorn An ASGI web server, for Python. 🦄 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn 在Python异步Web开发领域,Uvicorn已成为高…...
避坑指南:Webots 2022a在Windows安装后,为什么打不开示例项目?手把手教你排查与修复
Webots 2022a Windows安装避坑指南:示例项目无法加载的终极解决方案 当你满怀期待地在Windows上安装好Webots R2022a,准备开始机器人仿真之旅时,却发现内置的示例项目一片空白或频繁报错——这种挫败感我深有体会。作为一款功能强大的机器人仿…...
C++ Move 构造与深拷贝的性能对比
C Move构造与深拷贝的性能对比 在现代C编程中,资源管理是影响程序性能的关键因素之一。传统的深拷贝虽然能确保数据独立性,但频繁复制大型资源可能导致性能瓶颈。C11引入的移动语义(Move Semantics)通过转移资源所有权而非复制&a…...
语音转文字工具推荐:FireRedASR Pro实测,识别准确率超高
语音转文字工具推荐:FireRedASR Pro实测,识别准确率超高 1. 为什么我们需要专业的语音转文字工具? 在日常工作和学习中,语音转文字的需求无处不在。从会议记录到采访整理,从课程笔记到灵感记录,手动转录不…...

