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即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习算法在网络安全中的实践

机器学习算法在网络安全中的实践 本文将深入探讨机器学习算法在网络安全领域的应用实践,包括基本概念、常见算法及其应用案例,从而帮助程序员更好地理解和应用这一领域的技术。"> 序言 网络安全一直是信息技术领域的重要议题,随着互联…

Rust 所有权特性详解

Rust 所有权特性详解 Rust 的所有权系统是其内存安全的核心机制之一。通过所有权规则,Rust 在编译时避免了常见的内存错误(如空指针、数据竞争等)。本文将从堆内存与栈内存、所有权规则、变量作用域、String 类型、内存分配、所有权移动、Cl…

java练习(5)

ps:题目来自力扣 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这…

[EAI-023] FAST,机器人动作专用的Tokenizer,提高VLA模型的能力和训练效率

Paper Card 论文标题:FAST: Efficient Action Tokenization for Vision-Language-Action Models 论文作者:Karl Pertsch, Kyle Stachowicz, Brian Ichter, Danny Driess, Suraj Nair, Quan Vuong, Oier Mees, Chelsea Finn, Sergey Levine 论文链接&…

CodeGPT使用本地部署DeepSeek Coder

目前NV和github都托管了DeepSeek,生成Key后可以很方便的用CodeGPT接入。CodeGPT有三种方式使用AI,分别时Agents,Local LLMs(本地部署AI大模型),LLMs Cloud Model(云端大模型,从你自己…

Rust 中的注释使用指南

Rust 中的注释使用指南 注释是代码中不可或缺的一部分,它帮助开发者理解代码的逻辑和意图。Rust 提供了多种注释方式,包括行注释、块注释和文档注释。本文将详细介绍这些注释的使用方法,并通过一个示例展示如何在实际代码中应用注释。 1. 行…

STM32单片机学习记录(2.2)

一、STM32 13.1 - PWR简介 1. PWR(Power Control)电源控制 (1)PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能; (2)可编程电压监测器(…

基于SpringBoot的智慧康老疗养院管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

MQTT知识

MQTT协议 MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门针对低带宽和不稳定网络环境的物联网应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于物联网、移动互联网、智能硬件、车联网、智慧城市、远程医疗、…

Python(Pandas)数据分析学习

1.Pandas基本构成 引入Pandas import pandas as pd 1.Series 行 对应Excel中的一行数据,一维数据 定义Series # 第一个参数是具体数据 # 第二个参数的对应的索引下标 # 第三个参数的行名称 data pd.Series([1,2,3,4,5], index[a,b,c,d,e], namedata) print(d…

图漾相机——C++语言属性设置

文章目录 前言1.SDK API功能介绍1.1 Device组件下的API测试1.1.1 相机工作模式设置(TY_TRIGGER_PARAM_EX)1.1.2 TY_INT_FRAME_PER_TRIGGER1.1.3 TY_INT_PACKET_DELAY1.1.4 TY_INT_PACKET_SIZE1.1.5 TY_BOOL_GVSP_RESEND1.1.6 TY_BOOL_TRIGGER_OUT_IO1.1.…

STM32 TIM定时器配置

TIM简介 TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff…

【数据结构】_链表经典算法OJ(力扣/牛客第二弹)

目录 1. 题目1:返回倒数第k个节点 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 题目2:链表的回文结构 2.1 题目链接及描述 2.2 解题思路 2.3 程序 1. 题目1:返回倒数第k个节点 1.1 题目链接及描述 题目链接: 面试题 …

爬虫基础之爬取某站视频

目标网址:为了1/4螺口买小米SU7,开了一个月,它值吗?_哔哩哔哩_bilibili 本案例所使用到的模块 requests (发送HTTP请求)subprocess(执行系统命令)re (正则表达式操作)json (处理JSON数据) 需求分析: 视频的名称 F12 打开开发者工具 or 右击…

DeepSeek R1本地化部署 Ollama + Chatbox 打造最强 AI 工具

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 Ollama 🦋 下载 Ollama🦋 选择模型🦋 运行模型🦋 使用 && 测试 二:🔥 Chat…

【linux网络(5)】传输层协议详解(下)

目录 前言1. TCP的超时重传机制2. TCP的流量控制机制3. TCP的滑动窗口机制4. TCP的拥塞控制机制5. TCP的延迟应答机制6. TCP的捎带应答机制7. 总结以及思考 前言 强烈建议先看传输层协议详解(上)后再看这篇文章. 上一篇文章讲到TCP协议为了保证可靠性而做的一些策略, 这篇文章…

DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”

当算力博弈升级为网络战争:拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下,网络已然成为人类社会运转的关键基础设施,深刻融入经济、生活、政务等各个领域。从金融交易的实时清算&#xf…

DeepSeek-R1本地部署实践

一、下载安装 --Ollama Ollama是一个开源的 LLM(大型语言模型)服务工具,用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者、研究人员和爱好者能够在本地环境快速实验、管理和部署最新大语言…

【leetcode详解】T598 区间加法

598. 区间加法 II - 力扣(LeetCode) 思路分析 核心在于将问题转化, 题目不是要求最大整数本身,而是要求解最大整数的个数 结合矩阵元素的增加原理,我们将抽象问题转为可操作的方法,其实就是再找每组ops中…

【最后203篇系列】004 -Smarklink

说明 这个用来替代nginx。 最初是希望用nginx进行故障检测和负载均衡,花了很多时间,大致的结论是:nginx可以实现,但是是在商业版里。非得要找替代肯定可以搞出来,但是太麻烦了(即使是nginx本身的配置也很烦…