当前位置: 首页 > news >正文

Streamlit基础教程

streamlit是什么

streamlit是一个开源的python库,它能够快速的帮助我们创建定制化的web应用,而且还非常便于和他人分享,特别是在机器学习和数据科学领域。整个过程不需要你了解任何前端的知识,包括htmlcssjavascript等,对非前端开发人员非常的友好。

streamlit安装

streamlit要求python版本大于等于3.6,可以直接使用pip进行安装

pip install streamlit

安装成功后,使用其内置的hello app测试,执行命令

streamlit hello

服务启动后,它会自动帮我们打开页面,地址是 http://localhost:8501

63b66e7c5b44f6a1487949a616dc7fbd.png

streamlit

可以看到,streamlit默认使用端口8501

除此之外,streamlit官方还提供了一个稍复杂的应用,它结合了yolov3的目标检测算法,仓库地址:https://github.com/streamlit/demo-self-driving,感兴趣的可以去研究研究,代码简短,但功能完整

547e4ae0e2adba691ca12d070ae6f74d.gif

streamlit

那么,针对我们自己写的源码文件,该怎么运行呢?其实也非常简单,比如源码文件是app.py,那么可以执行

streamlit run app.py

这里再说2个常用的命令

  • streamlit docs 查看文档

  • streamlit cache clear 清缓存

streamlit常用组件

按钮

import streamlit as stbutton = st.button('按钮')

affcc56974073b81fa9a4d6596be8d78.png

streamlit button

文本输入框

import streamlit as stst.text_input('请输入最喜欢的编程语言', key="name")

c24b5cd21799a8e586786e885f1dc7ed.png

streamlit text_input

文本显示

import streamlit as stst.write('Hello streamlit.')

f6cf937597a9cc2270cc2c0095993251.png

streamlit write

streamlit完美支持markdown语法,可以直接使用write方法,来看示例

import streamlit as stst.write("""# 一级标题## 二级标题### 三级标题**强调**>这是引用. python    . java    . c/c++    . rust    
""")

103cec6aefd4fa31c6407d101fbbcf5f.png

streamlit write markdown

除了write方法,streamlit还提供了text方法,同样可以显示文本信息

import streamlit as stst.text('Hello streamlit.')

标题

import streamlit as stst.title('title')

e9ca3c715b6265f6149a634156504765.png

streamlit title

除了titlestreamlit还提供了headersubheader

import streamlit as stst.header('header')
st.subheader('subheader')

52aef844141cda4c2fa48758f0b613c3.png

streamlit header

滑动条

import streamlit as stnumber = st.slider('Pick a number', 0, 100)

49676a79e6e0d2f0fe2d8089391efe98.png

streamlit slider

选择框

import streamlit as stflag = st.checkbox('Yes')

cd97d92c1ca1f517f07025496b44211c.png

streamlit checkbox

单选按钮

import streamlit as stlanguages = ['python', 'c', 'rust', 'c++']st.radio('Pick a language', languages)

078c5515f503af78f5e53bc31a60cac4.png

streamlit radio

下拉选择框

import streamlit as stst.selectbox('用过哪几种编程语言?', ('python', 'c', 'java', 'rust'))

bd78d30b1c264a2fe0ec261353648f0b.png

streamlit selectbox

日期选择器

import streamlit as stdate = st.date_input('Pick a date')

10d08d262e68af30414a30a823c43542.png

streamlit date_input

颜色选择器

import streamlit as stcolor = st.color_picker('Pick a color')

e9c1268c14e10b5df9981c78d932ab8c.png

streamlit color_picker

文件选择器

import streamlit as stfile = st.file_uploader('Pick a file')

d1a8dfba4941dc7c714e3de925a5b2dd.png

streamlit file_uploader

streamlit的其它功能

显示json

import streamlit as stst.json({"code": 0,"data": {"sex": "female","age": 18,"score": 100}
})

6160a798de38d58d95099a6ad6b59df7.png

streamlit json

显示代码

from numpy.core.arrayprint import _leading_trailing
import streamlit as stcode = """def func():print('Hello streamlit.')
"""
st.code(code, language='python')

9bd7d3dd8908bb492f673ef0e259bcf1.png

streamlit code

显示pandas中的dataframe

from numpy.core.arrayprint import _leading_trailing
import streamlit as st
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randn(50, 5), columns=('col %d' % i for i in range(5)))
st.dataframe(df)

f4fea0ec0a970aad696b34180eed710b.png

streamlit pandas dataframe

最后一句中的st.dataframe(df)可以用st.write(df)来代替,效果一样

显示表格

import streamlit as st
import pandas as pd
import numpy as npdf = pd.DataFrame(np.random.randn(50, 5), columns=('col %d' % i for i in range(5)))
st.table(df)

5af854ba7a5b80c210dff05774d6336a.png

streamlit table

与上边的dataframe不同的是,表格会将所有数据都显示出来,而没有了滚动条

指标性数据显示

这里还需要安装另一个库streamlit-metrics,执行安装命令pip install streamlit-metrics即可

import streamlit as st
from streamlit_metrics import metric_rowst.write("一周数据统计")
metric_row({"关注人数": 100,"点赞人数": 200,"在看人数": 300,"分享人数": 400}
)

c70ac2e1ebf3a04fa1ad7d47c83cb85b.png

streamlit metric

streamlit的会话状态和回调

会话状态session state

在浏览器中打开新的页面,就创建了一个会话(session)。会话状态是页面rerun(并非类似F5的页面刷新)时数据交互的一种方式。

看个计数的示例

import streamlit as stst.title('Hello streamlit.')
counter = 0increment = st.button('Increment')
if increment:counter += 1st.write('Count= ', counter)

765aaa1bc05a636c6db06ba08bb11325.png

streamlit session state

可以看到只有第一次点击按钮时,Count增加了1,后面的点击,counter都不会改变,这显然跟我们的预期是不一样的。

我们修改下上面的代码

from typing import Counter
import streamlit as stst.title('Hello streamlit.')
if 'counter' not in st.session_state:st.session_state.counter = 0increment = st.button('Increment')
if increment:st.session_state.counter += 1st.write('Count= ', st.session_state.counter)

ef5976f6ea49f2e287992dd3ac4686e1.png

streamlit session state

这样功能就正常了,每点击一次按钮,Count就加1

回调callbacks

回调(callbacks)是一个python函数,它在输入组件更改时被调用,比如按钮被点击、滑动条被拉拽等。

针对上边的示例,使用callbacks修改一下

from typing import Counter
import streamlit as st# callbacks
def increment_counter():st.session_state.counter += 1st.title('Callbacks')
if 'counter' not in st.session_state:st.session_state.counter = 0st.button('Increment', on_click=increment_counter)
st.write('Count= ', st.session_state.counter)

代码执行的效果是一样的。这是无需传参的示例,如果需要数据交互,可以使用argskwargs,看下面的示例

import streamlit as stst.title('Callbacks with args')
if 'counter' not in st.session_state:st.session_state.counter = 0increment_value = st.number_input('Enter a value', value=0, step=1)def increment_counter(increment_value):st.session_state.counter += increment_valueincrement = st.button('Increment', on_click=increment_counter,args=(increment_value, ))st.write('Count = ', st.session_state.counter)

89068d8101452a9a717ccaba17def8bd.png

streamlit callbacks args

下面看看kwargs的用法,它接收的是命名参数

import streamlit as stst.title('Callbacks with kwargs')
if 'counter' not in st.session_state:st.session_state.counter = 0def increment_counter(increment_value=0):st.session_state.counter += increment_valuedef decrement_counter(decrement_value=0):st.session_state.counter -= decrement_valuest.button('Increment', on_click=increment_counter,kwargs=dict(increment_value=5))st.button('Decrement', on_click=decrement_counter,kwargs=dict(decrement_value=1))st.write('Count = ', st.session_state.counter)

1db6ebe798c4e1f1be7aea4095bef6d9.png

callbacks kwargs

点击Increment按钮,Count就加5,点击Decrement按钮,Count就减1

会话状态的注意事项

关于会话状态,有两点需要注意,分别是

  • 只要页面打开并连接到streamlit服务器,会话状态就会一直存在。一旦关闭选项卡,会话状态中存储的所有内容都会丢失

  • 会话状态不会持久化。如果streamlit服务器崩溃,那么存储在会话状态中的所有内容都会被删除

53d6eca28bd2191228acc9f941f9fe0d.jpeg

相关文章:

Streamlit基础教程

streamlit是什么 streamlit是一个开源的python库,它能够快速的帮助我们创建定制化的web应用,而且还非常便于和他人分享,特别是在机器学习和数据科学领域。整个过程不需要你了解任何前端的知识,包括html、css、javascript等&#x…...

内网穿透技术

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 转载自内…...

计算机网络笔记:内部网关协议RIP

文章目录 1.协议RIP的工作原理2.距离向量算法3.坏消息传播得慢 1.协议RIP的工作原理 RIP的地位:RIP是内部网关协议IGP中最先得到广泛使用的协议,其中文译名为路由信息协议。 RIP概述: RIP是一种分布式的基于距离向量的路由选择协议&#x…...

基于Java学生信息管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…...

PHP简单入门

PHP是一种流行的服务器端编程语言,被广泛用于Web开发。许多著名的网站和应用程序都是使用PHP编写的,例如Facebook、Wikipedia和WordPress等。本篇文章将为您介绍如何入门PHP编程。 环境配置 在开始使用PHP之前,需要先配置开发环境。要在本…...

java 客户端操作HDFS

1、windows上部署hadoop包 部署包win版本 源码包zip包 lib整合:共121个jar包 $HADOOP_PREFIX/share/hadoop/{common,hdfs,mapreduce,yarn,tools}/{lib,.}*.jar 将windows版本hadoop/bin/hadoop.dll 放到c:/windows/system32下 2、windows环境变量配置 hadoop的…...

区块链中的共识机制以及共识算法

目录 什么是共识 什么是共识机制 共识机制类型 1、基于工作证明(Proof of Work PoW)...

【计算机网络自顶向下】DNS简答题总结

主要功能:将域名解析为主机能识别的IP地址 DNS实现的功能 主机到IP地址的转换主机别名的转换邮件服务器别名负载均衡 DNS实现冗余服务器:一个IP地址集合对应同一个规范主机名 域名系统 分布式数据库:一个由多层DNS服务器实现的分布式数据库应…...

【QQ界面展示-实现自动回复 Objective-C语言】

一、刚才咱们监听键盘弹出事件,是怎么监听的, 1.监听键盘弹出事件的步骤 1)首先,在控制器的viewDidLoad方法中,创建一个NotificationCenter对象啊 2)通过center,让当前控制器的这个方法,监听这个通知, 3)然后,我们在这个通知里面,获取到键盘的Y值, 4)对我们的…...

-bash: ssh: command not found

解决方法: 命令安装SSH: yum -y install openssh-clients [roothad2 ~]# yum -y install openssh-clients Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.qlu.edu.cn * extras: mirrors.ustc.edu.cn …...

ansible的部署和模块

一、 ansible 的概述 1、ansible简介 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 …...

nginx的优化

目录 一 隐藏版本号在网页上面有nginx的版本号会让别人攻击你的服务器 二 nginx的优化之日志分割 三 nginx的优化之页面压缩 四 连接超时 五 nginx的并发设置 七总结:nginx的优化 一 隐藏版本号在网页上面有nginx的版本号会让别人攻击你的服务器 如图所示 第一种方法是关…...

MySQL8超详细安装教程

MySQL的下载与安装 一、MySQL8下载 MySQL Community Server 社区版本,开源免费,自由下载,但不提供官方技术支持,适用于大多数普通用户。 MySQL Enterprise Edition 企业版本,需付费,不能在线下载&#x…...

【FPGA入门】第五篇、按键消抖

目录 第一部分、按键抖动现象 第二部分、消抖思路及代码 1、简单的按键消抖思路 2、实际按键消抖思路 3、实际按键消抖模块代码 第三部分、总结 第一部分、按键抖动现象 只要学习过单片机的都会知道,按键在按下去和松开的那个瞬间都存在抖动,在单片…...

【MySql】MySql的事务基础篇

文章目录 CURD加控制什么是事物为什么会出现事务事务的版本支持事务的提交方式 CURD加控制 模拟一个买票系统的场景如下所示: MySQL注定会被多个客户端进行访问的,这个是肯定的,存储的都是数据,数据在上层可能有一个线程在用&…...

docker创建Ubuntu,Ubuntu创建桌面环境,本机使用VNC连接

题目:docker创建Ubuntu,Ubuntu创建桌面环境,本机使用VNC连接 文章目录 前言docker创建基于Ubuntu:20.04的容器使用ssh连接容器容器安装桌面环境本机电脑使用VNC连接测试用python来创建的ui能否显示坑参考 前言 为什么我想要用ubuntu的桌面环…...

理解redis的多线程和IO多路复用

参考资料 https://blog.csdn.net/TZ845195485/article/details/119745735 Redis单线程和多线程问题的背景 Redis里程碑版本迭代 Redis的单线程 主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取(socket读&a…...

iOS 开发 | 自定义不规则 label

把我之前发布在简书的博客搬运过来。 目录 场景思路具体实现1. 自定义一个继承自UILabel的IrregularLabel2. 在初始化方法中进行相应初始化和设置3. 在layoutSubviews方法中进行路径的设置 最终效果箭头 label 场景 最近 App 改版,以下是截取的部分 UI 设计图&…...

client-go的Indexer三部曲之三:源码阅读

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 《client-go的Indexer三部曲》全部链接 基本功能性能测试源码阅读 本篇概览 本文是《client-go的Indexer三部曲》系列的终篇,主要任务是阅读和…...

收件地址解析成 省+市+区+详细地址的形式

项目中的源代码在我的GitHub:https://github.com/weitw/address-analyzer 先看效果: 如上图,address数输入的地址,Address对象是解析后的地址。可以支持逆推上一级,且支持地址白话解析。 一、项目介绍 1、解析规则 …...

tools.simonwillison.net图像处理工具集:从裁剪到优化的完整指南

tools.simonwillison.net图像处理工具集:从裁剪到优化的完整指南 【免费下载链接】tools Assorted useful tools, almost entirely generated using LLMs 项目地址: https://gitcode.com/gh_mirrors/tools23/tools tools.simonwillison.net图像处理工具集是一…...

【DeepSeek测试用例生成实战指南】:20年QA专家亲授5大高覆盖率生成模式与3个避坑红线

更多请点击: https://codechina.net 第一章:DeepSeek测试用例生成的核心价值与适用边界 DeepSeek系列大模型在代码理解与生成任务中展现出显著的上下文建模能力,其测试用例生成功能并非通用“黑盒测试器”,而是聚焦于**单元级、函…...

3步深度解锁:网络设备权限管理工具的实战手册

3步深度解锁:网络设备权限管理工具的实战手册 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 你是否曾面对功能受限的网络设备感到束手无策?当默认配置锁死了硬…...

《我看见的世界:李飞飞自传》第1-6章阅读笔记:从移民少女到AI教母的“看见“之旅

前言 当我们谈论人工智能时,我们谈论的是算法、数据、算力,是那些冰冷的代码和复杂的模型。但在《我看见的世界:李飞飞自传》中,李飞飞用她独特的视角告诉我们:AI的本质,是人类对"看见"世界的渴望…...

Unity/Unreal开发者必看:用手机和陀螺仪实验,5分钟搞懂万向节死锁(附避坑指南)

Unity/Unreal开发者实战指南:用手机陀螺仪5分钟破解万向节死锁当你调试第一人称视角时,角色突然卡在墙面无法转动;当无人机模型在俯冲90度时失控乱转——这些很可能都是万向节死锁(Gimbal Lock)在作祟。作为实时3D开发中最恼人的数学陷阱之一…...

终极歌词同步神器LRCGET:5分钟为你的音乐库添加完美歌词

终极歌词同步神器LRCGET:5分钟为你的音乐库添加完美歌词 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你是否厌倦了在听歌时手动搜索歌词…...

通过Taotoken实现Hermes Agent自定义模型供应商接入

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken实现Hermes Agent自定义模型供应商接入 Hermes Agent是一个流行的AI智能体开发框架,它支持通过配置自定义…...

ComfyUI-WD14-Tagger:3分钟实现AI智能图像标签提取,效率提升10倍

ComfyUI-WD14-Tagger:3分钟实现AI智能图像标签提取,效率提升10倍 【免费下载链接】ComfyUI-WD14-Tagger A ComfyUI extension allowing for the interrogation of booru tags from images. 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-WD14-…...

对比按量计费与Token Plan套餐的实际成本差异

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比按量计费与Token Plan套餐的实际成本差异 在构建和运营基于大模型的应用时,成本控制是一个核心的工程考量。Taotok…...

Claude Code + LM Studio + CC-Switch 本地自动化编程部署指南

Claude Code LM Studio CC-Switch 本地自动化编程部署指南 本指南汇总了在 Windows 本地环境下,使用 Claude Code 配合 LM Studio 本地模型、CC-Switch 代理进行自动化编程开发的完整配置方案。 目录 硬件与模型选型LM Studio 本地模型部署CC-Switch 代理配置Cla…...