当前位置: 首页 > news >正文

《lvgl基础学习 —— button》

1.lv_btn

  lv_btn是LVGL里最常用的“可点击容器控件”。本身不显示文字、图标,只负责接收点击、触摸事件 + 提供按钮外观

  按钮上的文字、图标,都是子对象(通常是lv_label)

 

最小使用步骤:

lv_obj_t *btn = lv_btn_create(parent);
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "OK");
lv_obj_center(label);

 

demo:屏幕中央一个按钮,显示“Click me”

#include "lvgl.h"void ui_button_demo(void)
{/* 创建按钮 */lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 120, 50);lv_obj_center(btn);/* 按钮文字 */lv_obj_t *label = lv_label_create(btn);lv_label_set_text(label, "Click me");lv_obj_center(label);
}

 

按钮的灵魂:事件

  LVGL是事件驱动模型

  按钮点击 不等于 回调函数指针

  而是事件 + 回调

最常用的事件:

事件                     含义
LV_EVENT_PRESSED        按下
LV_EVENT_RELEASED       松开
LV_EVENT_CLICKED        完整点击(最常用)
LV_EVENT_LONG_PRESSED   长按

 

demo:点击按钮,文字变化

#include "lvgl.h"static lv_obj_t *label;static void btn_event_cb(lv_event_t *e)
{if(lv_event_get_code(e) == LV_EVENT_CLICKED) {lv_label_set_text(label, "Clicked!");}
}void ui_button_demo(void)
{lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 150, 60);lv_obj_center(btn);lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_CLICKED, NULL);label = lv_label_create(btn);lv_label_set_text(label, "Click me");lv_obj_center(label);
}

 

如何区分多个按钮

方法:user_data

static void btn_event_cb(lv_event_t *e)
{int id = (int)lv_event_get_user_data(e);if(id == 1) {printf("Button 1 clicked\n");} else if(id == 2) {printf("Button 2 clicked\n");}
}

创建按钮时:

lv_obj_add_event_cb(btn1, btn_event_cb, LV_EVENT_CLICKED, (void *)1);
lv_obj_add_event_cb(btn2, btn_event_cb, LV_EVENT_CLICKED, (void *)2);

 

按钮API说明:

设置大小:

lv_obj_set_size(btn, 200, 80);

设置位置:

lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 20);

设置圆角:

lv_obj_set_style_radius(btn, 10, 0);

设置背景颜色:

lv_obj_set_style_bg_color(btn, lv_color_hex(0x007AFF), 0);

 

按钮状态:

状态        说明
默认        松开
Pressed    按下
Disabled   禁用

 

禁用按钮:

lv_obj_add_state(btn, LV_STATE_DISABLED);

启用按钮:

lv_obj_clear_state(btn, LV_STATE_DISABLED);

 

http://www.zskr.cn/news/122022.html

相关文章:

  • Nginx - 内置变量
  • AWVS扫描效率提升300%:高级技巧与自动化方案
  • 国产替代正当时:盘点2025-2026年中国主流的生物反应器品牌与厂家 - 品牌推荐大师1
  • 论文致谢生成工具推荐:8大AI+情感化模板排名
  • python `if __name__ == __main__: `的作用
  • 2025年选购指南:十大高精度车铣复合数控机床品牌对比,液冷接头数控机床/军工配件数控机床/水暖接头数控机床车铣复合数控机床厂家排行榜 - 品牌推荐师
  • 深入解析:可编程逻辑器件学习(day26):低主频FPGA为何能碾压高主频CPU?
  • 2025年中型抽沙船厂家权威推荐榜单:射吸式抽沙船/斗轮式抽沙船/水陆两栖式抽沙船源头厂家精选 - 品牌推荐官
  • GitStats终极指南:5大核心功能深度解析
  • 深度剖析:北京婚姻律师机构 2025-2026 口碑排名及性价比评测 - 苏木2025
  • 24、LVS-DR集群与负载均衡器深度解析
  • THUPC2025 Asian Soul
  • vim替换
  • AI Agent、Agentic Workflow与Agentic AI:一文掌握!
  • 26、构建高可用性负载均衡集群:LVS、Heartbeat与ldirectord的协同应用
  • FlyFish:企业级数据可视化大屏快速搭建实战指南
  • 同样是用AI,有人用它搞钱,有人靠它涨粉,有人拿它做有意义的事儿,我只能用它来自娱自乐
  • PyODBC 终极指南:轻松连接 Python 与各类数据库的完整解决方案
  • GitStats全面指南:解锁Git仓库深度分析的神奇工具
  • 动漫资源管理终极指南:Mikan Project让追番不再迷茫![特殊字符]
  • 实时人像分割的性能突围:从主线程阻塞到Web Worker并行计算
  • labelCloud 终极指南:快速掌握3D点云标注的完整教程
  • 【强烈推荐】大模型微调实战指南:从LLaMA Factory到Ollama,打造你的专属模型
  • 2025年AI 写论文平台排行榜 Top10 · 系统评测与口碑对比
  • 高效管理3D打印丝材:Spoolman开源工具让库存追踪变简单
  • 2025年成都十大门窗排行榜:麒林门窗位居首位 - 博客万
  • AndroidAutoSize终极指南:5分钟搞定屏幕适配难题
  • 【金融图 Agent 安全防线构建】:基于图神经网络的风险识别技术突破
  • 建筑运营困于节能高效难题,楼宇自控系统助力破解
  • SC-400合规报告没人敢告诉你的4个隐藏功能(资深工程师揭秘)