『玩转Streamlit』--表单Form
在Streamlit中,Form组件是一种特殊的UI元素,允许用户输入数据而不立即触发应用的重新运行。
这对于创建需要用户输入多个参数后再进行处理的交互式表单非常有用。
1. 概要
Form组件的主要作用是在一个表单内集中处理多个用户输入,使得数据收集和验证更加高效和直观。
通过Form组件,开发者可以创建包含多个输入控件(如文本输入框、下拉选择框等)的表单,用户可以在表单内一次性填写所有必要的信息,然后提交。
这避免了传统表单提交时每次输入都会触发页面刷新的问题,从而提高了用户体验和应用的交互性。
根据Form组件的特点,在类似下面这些场景中,我们可以考虑使用Form:
- 用户注册与登录:通过
Form组件构建一个包含用户名、密码、邮箱等多个输入组件,以及一个提交按钮的页面,并在用户点击提交按钮后才开始进行验证和处理。 - 数据查询与筛选:通过
Form组件可以包含多个选择框、输入框等组件,用于收集用户的查询或筛选条件。 - 参数配置与设置:在构建复杂的Web应用程序时,可能需要用户配置或设置一些参数,这些参数可能包括算法参数、界面样式等。通过
Form组件,可以集中展示和配置这些参数。 - 多步骤表单处理:通过
Form组件,开发者可以创建包含多个步骤的表单,并在用户完成每个步骤后收集相应的数据。 - 动态表单生成:在某些高级应用场景中,可能需要根据用户的选择或输入动态生成表单。例如,在构建在线问卷时,可能需要根据用户的选择展示不同的问题。
总之,Streamlit的Form组件在很多应用场景中都发挥着重要作用,特别是在需要收集和处理多个用户输入的场景中表现尤为突出。
2. 主要参数
Form组件的参数很简单,主要用来简单的控制样式和提交的行为。
| 名称 | 类型 | 说明 |
|---|---|---|
| key | str | 组件名称,具有唯一性 |
| clear_on_submit | bool | 用户提交后,表单内的所有组件是否都重置为默认值 |
| enter_to_submit | bool | 当用户在与表单内的组件交互时,按Enter键时是否提交表单 |
| border | bool | 是否在窗体周围显示边框 |
Form组件本身并不直接接受各种组件来作为参数,但表单内部可以包含多种输入组件,如文本框(st.text_input)、选择框(st.selectbox)、滑块(st.slider)等。
此外,Form组件需要配合st.form_submit_button来创建一个提交按钮。
3. 使用示例
下面通过一些根据实际场景来简化的示例,演示Form组件的使用方式。
3.1. 数据预处理参数设置
在数据分析或机器学习项目中,数据预处理是一个关键步骤。
我们可以使用Form组件来让用户选择数据预处理的参数,如缺失值处理方法和特征缩放方法。
import streamlit as st
import pandas as pd
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# 加载示例数据集
data = pd.DataFrame(
{"feature1": [1, 2, None, 4, 5], "feature2": [10, 20, 30, None, 50]}
)
# 定义表单提交后的回调函数
def preprocess_data(fill_method, scale_method):
if fill_method == "mean":
data.fillna(data.mean(), inplace=True)
elif fill_method == "median":
data.fillna(data.median(), inplace=True)
else:
data.dropna(inplace=True)
if scale_method == "standard":
scaler = StandardScaler()
elif scale_method == "minmax":
scaler = MinMaxScaler()
else:
scaler = None
if scaler:
data_scaled = pd.DataFrame(
scaler.fit_transform(data),
columns=data.columns,
)
st.write(data_scaled)
else:
st.write(data)
# 创建表单
with st.form(key="preprocess_form"):
fill_method = st.selectbox(label="缺失值处理", options=["mean", "median", "drop"])
scale_method = st.selectbox(
label="特征缩放", options=["standard", "minmax", "none"]
)
submitted = st.form_submit_button(label="提交")
if submitted:
preprocess_data(fill_method, scale_method)
运行效果如下,【提交】按钮点击后才会刷新页面。

3.2. 机器学习模型超参数调优
在训练机器学习模型时,超参数的选择对模型性能有很大影响。
我们可以使用Form组件来让用户选择模型的超参数,并展示模型在验证集上的性能。
import streamlit as st
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 加载示例数据集
data = load_iris()
X, y = data.data, data.target
X_train, X_val, y_train, y_val = train_test_split(
X,
y,
test_size=0.2,
random_state=42,
)
# 定义表单提交后的回调函数
def train_model(n_estimators, max_depth):
model = RandomForestClassifier(
n_estimators=n_estimators,
max_depth=max_depth,
random_state=42,
)
model.fit(X_train, y_train)
y_pred = model.predict(X_val)
accuracy = accuracy_score(y_val, y_pred)
st.write(f"准确率: {accuracy:.2f}")
# 创建表单
with st.form(key="model_form"):
n_estimators = st.number_input(
label="Estimators 数量",
min_value=10,
max_value=200,
step=10,
value=100,
)
max_depth = st.number_input(
label="最大深度",
min_value=1,
max_value=20,
step=1,
value=10,
)
submitted = st.form_submit_button(label="开始训练")
if submitted:
train_model(n_estimators, max_depth)
运行界面如下,点击【开始训练】按钮后显示训练后模型的准确率。

4. 总结
总的来说,Streamlit的Form组件能够帮助我们简化表单的创建和数据收集的过程,使我们能够轻松构建具有复杂交互功能的数据应用。
『玩转Streamlit』--表单Form的更多相关文章
- 来玩Play框架04 表单
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 表单(form)是最常见的从客户往服务器传递数据的方式.Play框架提供了一些工具 ...
- HTML ------ 关于表单 Form
Form(表单)主要用于采集和提交用户输入的信息,是页面与WEB服务器交互过程中 最重要的信息来源. 掌握表单(Form)有以下几个要点: 重要form属性 form常用控件 form提交方式 § 重 ...
- Bootstrap~表单Form
回到目录 在进行自己的后台改版时,大体布局都使用了bootstrap,剩下的表单部分没理由不去使用它,对于表单的美化和布局,bootstrap做的也是很不错的,有大气的边框,多功能的按钮及宏观的表单布 ...
- 表单 - Form - EasyUI提供的表单异步提交
方案一 被提交的表单 <form id="loginForm" method="post"> <table align="cente ...
- 跟服务器交互的Web表单(form)
使用HTML来构建可以跟服务器交互的Web表单(form),通过给你的form元素添加一个action属性来达到此目的. action属性的值指定了表单提交到服务器的地址. 例如: <form ...
- 3、网页制作Dreamweaver(表单form)
表单form (虚线不显示) 1.写法: <form id="form1" name="form1" method="post" ac ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(九)--绑定表单Form到表格Grrid中
绑定表单Form到表格Grrid中 现在我们需要选中一行表格数据的时候 数据能在表单中显示出来 我们可以使用DHTMLX 丰富的组件功能实现它. 绑定表单到表格 1.调用bind方法将表单绑定到网格, ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(八)-- 添加表单Form
添加表单Form 我们下一步是在页面中添加一个表单,表格中的选中字段将会显示在表单中.提供一个提交按钮 可以对显示的数据进行修改提交. 添加表单到布局单元格中 1.在右侧布局中使用attachForm ...
- 微信小程序基础之表单Form的使用
表单Form的应用很广泛,我们可以利用form设计登录注册,也可以设计一种答题问卷的形式,今天主要讲一下form的使用 form表单,将组件内输入的"switch","i ...
- HTML(七)HTML 表单(form元素介绍,input元素的常用type类型,input元素的常用属性)
前言 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input> ...
随机推荐
- Angular 18+ 高级教程 – Component 组件 の Angular Component vs Web Component
前言 在 初识 Angular 中我有提到, Angular 团队是一群不爱创新.爱 follow 标准.爱小题大做的一群人. 所以,要理解 Angular Component,我们就非得要先搞懂远古 ...
- springboot-实现csv文件导出功能
excle文件导出,会遇到一个65535行限制的问题,就是导出的数据行数超过65535行就会导出失败,这个是excle本生的限制,这种情况下通常将导出的格式改成csv这样就可以跨过这个限制,同时生成的 ...
- DQL—查询操作
一.查询语法 select 字段列表 from 表名列表 where 条件列表 group by 分组列表 having 分组后条件 order by 排序字段 limit 分页限定 (提供一个表来操 ...
- Axios——异步框架
Axios--异步框架(简化AJAX代码书写) Axios 请求方式别名
- MVC模式与三层架构
MVC 模式 三层架构 MVC 模式 与 三层架构 的关系
- QT与JavaScript之QT6应用程序与JavaScript脚本集成开发:C++应用程序能与JavaScript实现相互调用吗?
简介 QT6框架中提供了JavaScript引擎类型QJSEngine ,可用于实现 C++应用程序和JavaScript代码之间的相互调用. 目录 什么是 ECMAScript ? JavaScri ...
- 安装windows11系统跳过微软账号登录,使用本地账号登录方法
在安装win11系统,进行到如图下所示界面的时候,暂停下 我们可以按下键盘的Shift+F10按键(部分电脑是Fn+Shift+F10),这时屏幕会出现命令行窗口,如图下所示 我们需要在命令行内输入代 ...
- Codeforces Round 977 (Div. 2)
手速局,因为水平不够三题遗憾离场. A. Meaning Mean 题意 你一个序列,你每次可以选择两个数删掉,并把他们的平均数加入到序列的末尾.当序列长度为 \(1\) 的时候,剩下的数最大值是多少 ...
- 2022年 GOPS 全球运维大会(上海站)资料分享
2022年 GOPS 全球运维大会(上海站)主题为"XOps 风向标",共分为16个专场,主要侧重方向是运维.DevOps.AIOps.DevSecOps.云原生.研发效能.可观测 ...
- HRM平台的登录页的背景图片- scss
.login-container { // 设置背景图片 background-image: url("~@/assets/common/login.jpg"); ba ...