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

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完