RustGUI学习(iced)之小部件(四):如何使用单选框radio部件?

2024-04-30 07:04

本文主要是介绍RustGUI学习(iced)之小部件(四):如何使用单选框radio部件?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言
本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。
iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1.

概述
这是本专栏的第四篇,主要讲述单选框按钮radio部件的使用,会结合实例来说明。
系列博客链接
1、RustGUI学习(iced)之小部件(一):如何使用按钮和文本标签部件
2、RustGUI学习(iced)之小部件(二):如何使用滑动条部件
3、RustGUI学习(iced)之小部件(三):如何使用下拉列表pick_list?

环境配置:
系统:windows
平台:visual studio code
语言:rust
库:iced

在这里插入图片描述
注:iced是一个受Elm启发而编写,适用于rust语言的跨平台的GUI库。

本篇内容:
1、radio

单选框部件

单选框部件radio在iced中的定义如下:

/// Creates a new [`Radio`].       
///
/// [`Radio`]: crate::Radio
pub fn radio<Message, Theme, Renderer, V>(label: impl Into<String>,value: V,selected: Option<V>,on_click: impl FnOnce(V) -> Message,
) -> Radio<Message, Theme, Renderer>
whereMessage: Clone,Theme: radio::StyleSheet,Renderer: core::text::Renderer,V: Copy + Eq,
{Radio::new(label, value, selected, on_click)
}

其由Radio来创建:

#[allow(missing_debug_implementations)]
pub struct Radio<Message, Theme = crate::Theme, Renderer = crate::Renderer>    
whereTheme: StyleSheet,Renderer: text::Renderer,
{is_selected: bool,on_click: Message,label: String,width: Length,size: f32,spacing: f32,text_size: Option<Pixels>,text_line_height: text::LineHeight,text_shaping: text::Shaping,font: Option<Renderer::Font>,style: Theme::Style,
}

我们来看一下radio部件的参数和属性,其中项width、text_size之类的属性我们将不再赘述,主要看一下radio部件主要的参数:
1、label是字符类型,表示单选框的名称,
2、is_selected:布尔量,它是一个比较结果:

is_selected: Some(value) == selected,  

其中value是当前radio的预设值,将其与实时值比较,以判定当前radio是否被选中。
3、on_click:用于监听radio是否被选中,若选中,则触发消息。其反馈值包含当前选中的是哪个radio值。
简单的说一下外观样式的自定义:
和之前所说的部件类似,radio部件如果要自定义样式,需要先创建自定义结构体样式:

//自定义radio样式1
struct MyRadioStyle;

然后实现StyleSheet:

impl radio::StyleSheet for MyRadioStyle {    type Style =  Theme;fn active(&self, style: &Self::Style, is_selected: bool) -> radio::Appearance {radio::Appearance { background: Background::Color(Color::from_rgb8(180, 184, 248)), dot_color: Color::from_rgb8(252, 29, 29), border_width:1.0, border_color: Color::BLACK, text_color:Some(Color::BLACK),}}fn hovered(&self, style: &Self::Style, is_selected: bool) -> radio::Appearance {radio::Appearance { background: Background::Color(Color::from_rgb8(126, 241, 132)), dot_color: Color::from_rgb8(252, 29, 29), border_width: 1.0, border_color: Color::BLACK, text_color: Some(Color::BLACK),}}
}

其效果如下:
在这里插入图片描述

下面来看一下实际使用,一般来说,单选框至少是成对出现,否则单选框就失去了意义。本例中我们假设有4个单选框为1组,我们先创建一个枚举如下:

#[derive(Debug,Clone,Copy,PartialEq,Eq)]
pub enum Choise{  A,B,C,All,
}

这个Choise枚举包含A、B、C、All四个选项,将会分别对应四个单选框。
然后我们在Message枚举中添加一个项:

RadioChose(Choise),   

RadioChose消息的内部参数是Choise枚举。
因为radio的参数中还有一个selected值,其定义为:

selected: Option<V>,

所以,我们在结构体中新建变量:

select_choise:Option<Choise>,

新变量select_choise是一个枚举类型,参数是Choise枚举。

然后我们将创建4个radio部件:

radio("A", Choise::A, self.select_choise, Message::RadioChose).width(6).size(15).spacing(4),  radio("B",Choise::B, self.select_choise, Message::RadioChose).width(6).size(15).spacing(4),radio("C",Choise::C, self.select_choise, Message::RadioChose).width(6).size(15).spacing(4),radio("All",Choise::All, self.select_choise, Message::RadioChose).width(6).size(15).spacing(4),

可以看到其格式都是相同的,我们选取其中一个来做说明。

radio("A", Choise::A, self.select_choise, Message::RadioChose).width(6).size(15).spacing(4), 

如上代码,其中字符串“A”表示radio的名称,即label属性。
而Choise::A对应的是value属性,即当前radio的值。
而select_choise则表示实时值,它会根据所选择的不同radio来改变,其改变逻辑在update函数中实现。
最后,Message::RadioChose表示消息触发。
当我们选择4个单选框中的任何一个时,都会触发消息Message,Message会反馈当前选择的radio值,我们在update中处理这个值:

Message::RadioChose(choise)=>{self.select_choise=Some(choise);}

即将触发产生的radio实时值传递给select_choise,这样UI就会更新当前radio选中项。
在这里插入图片描述
以上就是单选框部件radio的使用介绍,相对来说,radio的使用比较简单,我们来看一下动态演示:
在这里插入图片描述

这篇关于RustGUI学习(iced)之小部件(四):如何使用单选框radio部件?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948186

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H