LVGL开发教程-按钮Button

2024-06-19 23:12
文章标签 lvgl button 教程 按钮 开发

本文主要是介绍LVGL开发教程-按钮Button,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章目录

知不足而奋进 望远山而前行


目录

系列文章目录

文章目录

前言

1. 普通Button

2.可选中Button

3.按钮事件处理

总结


前言

在图形用户界面(GUI)开发中,按钮(Button)是用户与程序交互的重要组件之一。通过按钮,用户可以触发各种操作和事件,从而实现对应用程序的控制和导航。本文将介绍如何使用 LittlevGL 库创建普通按钮和可选中按钮,并实现它们的事件处理功能。


hi按钮Button是用户和程序的一种交互手段。

1. 普通Button

创建Button:

lv_obj_t * lv_btn_create(lv_obj_t * parent)

添加事件处理:

struct _lv_event_dsc_t * lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t filter,void * user_data)

参数1:按钮控件

参数2:回调函数

参数3:处理的事件

参数4:传递用户数据

示例代码:

void first_screen(){// 创建按钮lv_obj_t* btn = lv_btn_create(lv_scr_act());lv_obj_align(btn,LV_ALIGN_CENTER,0,0);// 创建按钮上的文本lv_obj_t* label = lv_label_create(btn);lv_label_set_text(label,"button");
}

2.可选中Button

void first_screen(){lv_obj_t * label;lv_obj_t * btn2 = lv_btn_create(lv_scr_act());lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 0);//设置按钮可以被选中lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE);label = lv_label_create(btn2);lv_label_set_text(label, "Toggle");
}

3.按钮事件处理

普通按钮需要处理点击事件,可选中按钮需要处理选中状态切换事件。

添加事件处理:

struct _lv_event_dsc_t * lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t filter,void * user_data)

参数1:需要进行事件处理的object

参数2:事件处理回调函数

参数3:需要处理的事件

参数4:传递用户数据

普通按钮点击事件:

//事件回调函数
void event_handler(lv_event_t * e){int code = lv_event_get_code(e);lv_obj_t* obj = lv_event_get_target(e);if(code == LV_EVENT_CLICKED){lv_obj_t* label = lv_event_get_user_data(e);lv_label_set_text(label,"itheima");printf("clicked\n");}
}void first_screen(){lv_obj_t * label;lv_obj_t * btn1 = lv_btn_create(lv_scr_act());//给按钮设置点击事件处理lv_obj_add_event_cb(btn1, event_handler, LV_EVENT_CLICKED, NULL);...
}

可选中Button事件处理:

//事件回调
void event_handler(lv_event_t * e){lv_event_code_t code = lv_event_get_code(e);if(code==LV_EVENT_VALUE_CHANGED){printf("toggled btn\n");}
}void first_screen(){lv_obj_t * label;lv_obj_t * btn2 = lv_btn_create(lv_scr_act());lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_VALUE_CHANGED, NULL);...
}

区分多个按钮事件:

多个按钮点击事件使用通过同一个回调函数处理时,可以在添加事件时通过user_data参数区分

void event_handler(lv_event_t * e){lv_event_code_t code = lv_event_get_code(e);char *d = (char *)lv_event_get_user_data(e);if(code==LV_EVENT_CLICKED){if(strcmp(d,"btn1")==0){printf("click data1\n");}else if(strcmp(d,"btn2")==0){printf("click data2\n");}}
}void first_screen(){lv_obj_t * label;char *data1 = "btn1";char *data2 = "btn2";lv_obj_t * btn1 = lv_btn_create(lv_scr_act());...lv_obj_t * btn2 = lv_btn_create(lv_scr_act());lv_obj_add_event_cb(btn2, event_handler, LV_EVENT_CLICKED, data2);...
}

总结

本文详细讨论了在 LittlevGL 中创建和处理按钮的方法。首先,通过 lv_btn_create 函数创建了普通按钮和可选中按钮,并演示了如何在按钮上添加文本。其次,通过 lv_obj_add_event_cb 函数为按钮添加事件处理函数,区分了普通按钮的点击事件和可选中按钮的状态切换事件。最后,展示了如何通过 user_data 参数区分多个按钮的事件处理,使得同一事件处理函数可以应用于不同按钮,并根据需要执行不同的逻辑操作。通过本文的学习,读者可以掌握在 LittlevGL 中有效管理和操作按钮的关键技能,从而提升 GUI 应用程序的交互性和用户体验。

这篇关于LVGL开发教程-按钮Button的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

Steam邮件推送内容有哪些?配置教程详解!

Steam邮件推送功能是否安全?如何个性化邮件推送内容? Steam作为全球最大的数字游戏分发平台之一,不仅提供了海量的游戏资源,还通过邮件推送为用户提供最新的游戏信息、促销活动和个性化推荐。AokSend将详细介绍Steam邮件推送的主要内容。 Steam邮件推送:促销优惠 每当平台举办大型促销活动,如夏季促销、冬季促销、黑色星期五等,用户都会收到邮件通知。这些邮件详细列出了打折游戏、

X-AnyLabeling使用教程

1.AI 模型自动分割标注使用教程 2.AI 模型自动目标检测标注使用教程

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚

青龙面板2.9之Cdle傻妞机器人编译教程

看到有的朋友对傻妞机器人感兴趣,这里写一下傻妞机器人的编译教程。 第一步,这里以linux amd64为例,去官网下载安装go语言安装包: 第二步,输入下方指令 cd /usr/local && wget https://golang.google.cn/dl/go1.16.7.linux-amd64.tar.gz -O go1.16.7.linux-amd64.tar.gz

FastAdmin/bootstrapTable 表格中生成的按钮设置成文字

公司有个系统后台框架用的是FastAdmin,后台表格的操作栏按钮只有图标,想要设置成文字。 查资料后发现其实很简单,主需要新增“text”属性即可,如下 buttons: [{name: 'acceptcompany',title: '复核企业',text:'复核企业',classname: 'btn btn-xs btn-primary btn-dialog',icon: 'fa fa-pe

青龙面板部署通用教程,含服务器、路由器、X86等部署方法

1. 拉取镜像/更新镜像 docker pull whyour/qinglong:latest 2. 删除镜像 docker rmi whyour/qinglong:latest 3. 启动容器 普通服务器 docker run -dit \-v $PWD/ql/config:/ql/config \-v $PWD/ql/log:/ql/log \-v $PWD/ql/db:

宝塔面板部署青龙面板教程【简单易上手】

首先,你得有一台部署了宝塔面板的服务器(自己用本地电脑也可以)。 宝塔面板部署自行百度一下,很简单,这里就不走流程了,官网版本就可以,无需开心版。 首先,打开宝塔面板的软件商店,找到下图这个软件(Docker管理器)安装,青龙面板还是安装在docker里,这里依赖宝塔面板安装和管理docker。 安装完成后,进入SSH终端管理,输入代码安装青龙面板。ssh可以直接宝塔里操作,也可以安装ssh连接