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

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也可以直接打印
123

a=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) #使用字典创建DataFrame

st.dataframe(df) #显示表格,直接写df也可以————交互式表格
df

st.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 st

if "a" not in st.session_state: # 如果a还没在会话状态中
    st.session_state.a=0 # 则把a加入会话状态,并赋值为0

clicked = 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.kler.cn/a/527336.html

相关文章:

  • CSS核心
  • 如何写美赛(MCM/ICM)论文中的Summary部分
  • docker安装nacos2.2.4详解(含:nacos容器启动参数、环境变量、常见问题整理)
  • 级数论存在重大错误的原因:中学数学对无穷数列的认识存在重大错误
  • 物联网智能项目之——智能家居项目的实现!
  • 解析“in the wild”——编程和生活中的俚语妙用
  • 04树 + 堆 + 优先队列 + 图(D1_树(D2_二叉树(BT)(D2_刷题练习)))
  • “星门计划对AI未来的意义——以及谁将掌控它”
  • Ethflow Round 1 (Codeforces Round 1001, Div. 1 + Div. 2)(A,B,C,E1)
  • hot100(4)
  • 对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
  • Baklib推动企业知识管理创新与效率提升的全面探讨
  • 计算机网络 性能指标相关
  • Python——基本数据类型——字符串类型
  • 代码随想录刷题day20|(哈希表篇)15.三数之和
  • 机器学习6-全连接神经网络2
  • 基于改进的强跟踪技术的扩展Consider Kalman滤波算法在无人机导航系统中的应用研究
  • 使用 Ollama 和 Kibana 在本地为 RAG 测试 DeepSeek R1
  • LeetCode 0541.反转字符串 II:模拟
  • C# 数组和列表的基本知识及 LINQ 查询
  • Spring Boot 基础开发:实现 RESTful API 开发
  • 【算法设计与分析】实验4:动态规划—0/1背包问题
  • Baklib赋能企业实现高效数字化内容管理提升竞争力
  • 【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册
  • 第05章 16 Implicit Function应用举例
  • 【蓝桥杯】43697.机器人塔