首页 > 其他分享 >streamlit控件和控制1

streamlit控件和控制1

时间:2023-11-01 11:47:53浏览次数:33  
标签:控件 控制 button st state session 按钮 streamlit click

streamlit控件和控制

目录

元素控件

button:			  #按钮
download_button:  #文件下载
file_uploader:	  #文件上传
checkbox:	      #复选框
radio:		      #单选框
selectbox:	      #下拉单选框
multiselect:	  #下拉多选框
slider:		      #滑动条
select_slider:    #选择条
text_input:       #文本输入框
text_area:        #文本输入区域
number_input:     #数字输入框,支持加减按钮
date_input:       #日期选择框
time_input:	      #时间选择框
color_picker:     #颜色选择器

状态元素

st.progress:	#进度条 
st.spinner:		#等待提示

st.status:		 #显示状态
st.toast:        #显示短消息
st.info:        #显示常规信息
st.success:		#显示成功信息
st.warning:		#显示报警信息
st.error:		#显示错误信息
st.exception:	#显示异常信息

st.balloons:	#页面底部飘气球,表示庆祝
st.snow: 		 #页面飘雪,表示庆祝

st.button特性

使用 st.button 函数创建的按钮具有独特的特点。按钮在点击后不会保留状态。
相反,当按钮被点击后,脚本会重新运行,并且按钮在下一次脚本重新运行时立即返回到原始状态。代码和变量初始化。
如果在st.button函数中嵌套了可见元素,则该元素将在按钮被点击时显示,并在用户进行下一次操作后立即消失。
这是因为脚本重新运行,按钮的返回值在按钮点击事件中变为True,并在下一次脚本重新运行时返回为False。

显示临时消息

import streamlit as st

fruit_list = ['Apple', 'Banana', 'Orange', 'Mango']

fruit = st.text_input('输入一个水果')

if st.button('检查是包含'):
    if fruit.lower() in fruit_list:
   		st.success("包含该水果")
    else:
        st.warning("缺乏该水果")

脚本将重新运行,并且消息会在他们再次点击"检查是包含"按钮之前消失。    并不能进行状态保存

状态保留,回调函数

要求点击后,保留上次点击的状态

使用Streamlit的session_state功能来实现这个目标。我将为你展示如何创建一个变量,然后使用按钮点击事件将该变量的值设置为True。
import streamlit as st
from datetime import date, datetime

if 'clicked' not in st.session_state:
    st.session_state.clicked = False
 
if 'button' not in st.session_state:
    st.session_state.button = False   
    

def click_clicked():
    st.session_state.clicked = True

def click_button():
    st.session_state.button = True

def click_clear():
    st.session_state.clicked = False
    st.session_state.button = False 


def main():
    st.subheader ("多个button输出示例")

    button=st.button("显示日期",on_click=click_clicked)
    if st.session_state.clicked:
    # 消息和嵌套小部件将保留在页面上
        st.write("当前日期为:", date.today())
        
    st.button('点击我', on_click=click_button)
    st.write('按钮已点击!')
    
    if st.session_state.button:
    # 消息和嵌套小部件将保留在页面上
        st.slider('选择一个值')
        
    st.button('消除状态', on_click=click_clear)
    
    
if __name__ == "__main__":
    main()

# 可以在回调函数中添加
import streamlit as st

st.title('Counter Example using Callbacks with args')
if 'count' not in st.session_state:
    st.session_state.count = 0

increment_value = st.number_input('Enter a value', value=0, step=1)

def increment_counter(increment_value):
    st.session_state.count += increment_value

increment = st.button('Increment', on_click=increment_counter,
    args=(increment_value, ))

st.write('Count = ', st.session_state.count)

切换按钮

import streamlit as st

# 通过 对 session_state 中状态的 操作,控制按钮的切换
if 'button' not in st.session_state:
    st.session_state.button = False

def click_button():
    st.session_state.button = not st.session_state.button

st.button('点击我', on_click=click_button)


if st.session_state.button:
    # 消息和嵌套小部件将保留在页面上
    st.write('按钮已打开!')
    st.slider('选择一个值')
else:
    st.write('按钮已关闭!')

控制流

import streamlit as st

# 通过stage的状态数值, 来控制相关逻辑流

if 'stage' not in st.session_state:
    st.session_state.stage = 0

def set_state(i):
    st.session_state.stage = i

if st.session_state.stage == 0:
    st.button('开始', on_click=set_state, args=[1])

if st.session_state.stage >= 1:
    name = st.text_input('姓名', on_change=set_state, args=[2])

if st.session_state.stage >= 2:
    st.write(f'你好,{name} ')
    color = st.selectbox(
        '选择一种颜色',
        [None, '红色', '橙色', '绿色', '蓝色', '紫色'],
        on_change=set_state, args=[3]
    )
    if color is None:
        set_state(2)

if st.session_state.stage >= 3:
    st.write(f' 选择完成:{color}')
    st.button('重新开始', on_click=set_state, args=[0])

动态增删元素

import streamlit as st

# 通过stage的状态数值, 自动动态更新增删相关元素

def display_input_row(index):
    left, middle, right = st.columns(3)
    left.text_input('First', key=f'first_{index}')
    middle.text_input('Middle', key=f'middle_{index}')
    right.text_input('Last', key=f'last_{index}')


if 'rows' not in st.session_state:
    st.session_state['rows'] = 0


def increase_rows():
    st.session_state['rows'] += 1
    
def delete_rows():
    if st.session_state['rows'] > 0:
        st.session_state['rows'] -= 1   

st.button('Add person', on_click=increase_rows)
st.button('Remove person', on_click=delete_rows)


for i in range(st.session_state['rows']):
    display_input_row(i)


st.subheader('People')
for i in range(st.session_state['rows']):
    st.write(
        f'Person {i+1}:',
        st.session_state[f'first_{i}'],
        st.session_state[f'middle_{i}'],
        st.session_state[f'last_{i}']
    )

常见错误

按钮嵌套错误

import streamlit as st

if st.button('Button 1'):
    st.write('Button 1 was clicked')
    if st.button('Button 2'):
        # This will never be executed.
        st.write('Button 2 was clicked')

# 按钮2被嵌套在按钮1的内部。这种嵌套将导致按钮2永远不会被执行

按钮关联错误

import streamlit as st
import pandas as pd

file = st.file_uploader("Upload a file", type="csv")

button1 = st.button('Get data')
if button1:
    df = pd.read_csv(file)
    # This display will go away with the user's next action.
    st.write(df)

button2 = st.button('Save')
if button2:
    # This will always error.
    df.to_csv('data.csv')

# button1 和 button2 相互关联,但是并没有对状态进行保存

参考资料

https://blog.csdn.net/weixin_46043195/article/details/132115271

https://www.qixinbo.info/2022/03/10/streamlit_2/

标签:控件,控制,button,st,state,session,按钮,streamlit,click
From: https://www.cnblogs.com/tian777/p/17802697.html

相关文章

  • streamlit容器布局
    streamlit容器布局目录streamlit容器布局侧边栏交互sidebar并排布局columns选项卡tabs展开式容器expander透明多元素container单元素empty参考资料侧边栏交互sidebarst.sidebar将交互元素添加至侧边栏#方法1.使用对象表示法st.sidebar.[element_name]#方法2.使用"w......
  • streamlit控件和控制2
    streamlit控件和控制2目录streamlit控件和控制2st.radiost.selectboxst.multiselectst.select_sliderst.sliderst.progress参考资料button: #按钮download_button:#文件下载file_uploader: #文件上传checkbox: #复选框toggle:#切换框radio: #......
  • streamlit数据和绘图
    streamlit数据和绘图目录streamlit数据和绘图st.dataframest.data_editorst.column_configst.metricst.line_chartst.bar_chartst.area_chartst.scatter_chartst.pyplotst.plotly_chartstreamlit_echarts插件参考资料st.dataframe数据展示支持(pandas.DataFrame,pandas.Seri......
  • 《安富莱嵌入式周报》第320期:键盘敲击声解码, 军工级boot设计,开源CNC运动控制器,C语言
     视频版:https://www.bilibili.com/video/BV1Cr4y1d7Mp/1、键盘敲击声解码https://arxiv.org/abs/2308.01074键盘敲击声被解码的话,我们使用键盘输入密码将被方便的解码出来。这篇文章介绍了一种使用最先进的深度学习模型,以便使用手机麦克风对笔记本电脑敲击键盘分析。实际测试训练......
  • 无忧企业文档2.1.8版本新增文档级权限控制
    无忧企业文档是一款针对企业用户提供在线文档、协同编辑、知识管理的基础化办公工具,产品采用B/S构架。功能覆盖场景包括:在线文档的私有化部署、团队协同、知识管理、在线文档识别的扩展、文档权限化管理等等场景。本次2.1.8版本新增了文档级权限控制核心功能,具体介绍如下:文档级权限......
  • 二、3、java基础之流程控制语句
    一、顺序结构根据代码的书写顺序进行执行代码二、选择结构      if选择语句:格式1:if(关系表达式){语句体;}格式2:if(关系表达式){语句体1;......
  • Java流程控制_03死循环、循环嵌套
    1、死循环 2、循环嵌套 ......
  • 一篇搞定Sentinel-搭建Spring Cloud Alibaba服务组件Sentinel实现服务资源控制
    1、Sentinel介绍随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性......
  • 界面控件DevExpress WinForms Gauge组件 - 实现更高级别数据可视化
    DevExpressWinForms控件包含了超过150个随时可用的仪表盘预设,包括圆形,数字,线性和状态指示器等,来帮助用户实现更高级的数据可视化。DevExpressWinForms有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序,无论是......
  • 课程设计报告:三层电梯控制电路
    课程设计报告:三层电梯控制电路封面(在此省略)课程设计任务书课题名称:三层电梯控制电路设计要求:每层电梯入口处设有上下请求开关,电梯内设有顾客到达层次的停站请求开关。设有电梯入口处位置指示装置及电梯运行模式(上升或下降)指示装置。电梯每秒升(降)一层楼。电梯到达有停......