GUI guider 常用函数解析

GUI Guider 是 NXP 提供的用于设计和生成 LittlevGL (LVGL) 用户界面的工具。它生成的代码包括初始化、事件处理和其他相关功能。以下是一些常用的 GUI Guider 函数及其介绍:

1. void setup_scr_<screen_name>(lv_ui *ui)

描述: 初始化并设置指定的屏幕。
参数:

  • lv_ui *ui: 指向包含所有 LVGL 对象的结构的指针。

示例:

void setup_scr_main_screen(lv_ui *ui) {
    // 初始化和设置主屏幕
}

2. void events_init(lv_ui *ui)

描述: 初始化屏幕上的所有事件处理程序。
参数:

  • lv_ui *ui: 指向包含所有 LVGL 对象的结构的指针。

示例:

void events_init(lv_ui *ui) {
    // 注册所有事件处理程序
}

3. void custom_init(lv_ui *ui)

描述: 用于用户自定义的初始化代码。
参数:

  • lv_ui *ui: 指向包含所有 LVGL 对象的结构的指针。

示例:

void custom_init(lv_ui *ui) {
    // 用户自定义初始化代码
}

4. lv_event_cb_t <object_name>_event_handler

描述: 特定对象的事件处理程序。
参数:

  • lv_event_t *e: LVGL 事件指针。

示例:

void btn1_event_handler(lv_event_t *e) {
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t *btn = lv_event_get_target(e);
    
    if(code == LV_EVENT_CLICKED) {
        // 处理按钮点击事件
    }
}

5. void lv_ui_init(lv_ui *ui)

描述: 初始化所有 UI 组件。
参数:

  • lv_ui *ui: 指向包含所有 LVGL 对象的结构的指针。

示例:

void lv_ui_init(lv_ui *ui) {
    setup_scr_main_screen(ui);
    events_init(ui);
}

6. void lv_task_handler(void)

描述: LVGL 的任务处理函数,通常在主循环中调用以处理 LVGL 的任务。
参数: 无。

示例:

void app_main(void) {
    lv_init();
    lv_ui ui;
    lv_ui_init(&ui);
    
    while(1) {
        lv_task_handler();
        vTaskDelay(1); // FreeRTOS 中的延迟函数
    }
}

7. void lv_timer_handler(void)

描述: 定时处理 LVGL 任务,通常在硬件定时器中调用。
参数: 无。

示例:

esp_timer_handle_t lvgl_timer;
const esp_timer_create_args_t lvgl_timer_args = {
    .callback = &lv_timer_handler,
    .name = "lvgl_timer"
};
ESP_ERROR_CHECK(esp_timer_create(&lvgl_timer_args, &lvgl_timer));
ESP_ERROR_CHECK(esp_timer_start_periodic(lvgl_timer, 5 * 1000)); // 每5ms调用一次

8. void lv_scr_load(lv_obj_t *scr)

描述: 加载并显示指定的屏幕。
参数:

  • lv_obj_t *scr: 指向要加载的屏幕对象的指针。

示例:

lv_obj_t *main_screen = lv_obj_create(NULL);
lv_scr_load(main_screen);

9. void lv_obj_clean(lv_obj_t *obj)

描述: 清除对象的所有子对象。
参数:

  • lv_obj_t *obj: 指向要清除的对象的指针。

示例:

lv_obj_clean(lv_scr_act()); // 清空当前屏幕

10. void lv_obj_del(lv_obj_t *obj)

描述: 删除指定的对象。
参数:

  • lv_obj_t *obj: 指向要删除的对象的指针。

示例:

lv_obj_del(button1); // 删除 button1 对象

整体示例

下面是一个完整的示例,展示了如何使用 GUI Guider 生成的函数来初始化和管理屏幕:

#include "lvgl.h"
#include "gui_guider.h"
#include "events_init.h"
#include "custom.h"

lv_ui guider_ui;

void app_main(void) {
    lv_init();
    
    // 初始化显示和输入设备
    lv_disp_drv_t disp_drv;
    lv_indev_drv_t indev_drv;
    lv_disp_drv_init(&disp_drv);
    lv_indev_drv_init(&indev_drv);
    lv_disp_drv_register(&disp_drv);
    lv_indev_drv_register(&indev_drv);

    // 初始化 GUI Guider
    lv_ui_init(&guider_ui);
    
    // 加载主屏幕
    setup_scr_main_screen(&guider_ui);
    lv_scr_load(guider_ui.main_screen);
    
    // 主循环
    while (1) {
        lv_task_handler();
        vTaskDelay(1); // FreeRTOS 延迟
    }
}

总结

以上介绍了 GUI Guider 生成的常用函数及其功能。通过这些函数,你可以初始化和管理 LVGL 用户界面,处理用户事件,并实现自定义的界面逻辑。如果有更多问题或需要进一步的帮助,请告诉我。

除了前面介绍的函数外,在使用 GUI Guider 生成的代码和 LVGL 驱动 TFT 屏幕时,还有一些其他常用的函数。这些函数在初始化、事件处理和屏幕管理中非常有用。以下是一些其他常用的函数及其简要说明:

11. lv_obj_t *lv_label_create(lv_obj_t *parent)

描述: 创建一个新的标签对象。
参数:

  • lv_obj_t *parent: 指向父对象的指针。
    返回值: 新创建的标签对象。

示例:

lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Hello, LVGL!");

12. lv_obj_t *lv_btn_create(lv_obj_t *parent)

描述: 创建一个新的按钮对象。
参数:

  • lv_obj_t *parent: 指向父对象的指针。
    返回值: 新创建的按钮对象。

示例:

lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_set_size(btn, 100, 50);

13. void lv_label_set_text(lv_obj_t *label, const char *text)

描述: 设置标签的文本。
参数:

  • lv_obj_t *label: 指向标签对象的指针。
  • const char *text: 要设置的文本。

示例:

lv_label_set_text(label, "New Text");

14. void lv_btn_set_action(lv_obj_t *btn, lv_btn_action_t type, lv_action_t action)

描述: 设置按钮的动作回调函数(适用于旧版本的 LVGL,LVGL 7.0 之前)。
参数:

  • lv_obj_t *btn: 指向按钮对象的指针。
  • lv_btn_action_t type: 按钮动作类型(如 LV_BTN_ACTION_CLICK)。
  • lv_action_t action: 回调函数。

示例:

static lv_res_t btn_click_action(lv_obj_t *btn) {
    printf("Button clicked\n");
    return LV_RES_OK;
}

lv_btn_set_action(btn, LV_BTN_ACTION_CLICK, btn_click_action);

15. void lv_obj_set_pos(lv_obj_t *obj, lv_coord_t x, lv_coord_t y)

描述: 设置对象的位置。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t x: X 坐标。
  • lv_coord_t y: Y 坐标。

示例:

lv_obj_set_pos(label, 10, 10);

16. void lv_obj_set_size(lv_obj_t *obj, lv_coord_t w, lv_coord_t h)

描述: 设置对象的大小。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t w: 宽度。
  • lv_coord_t h: 高度。

示例:

lv_obj_set_size(btn, 100, 50);

17. void lv_obj_set_hidden(lv_obj_t *obj, bool hide)

描述: 显示或隐藏对象。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • bool hide: 如果为 true,隐藏对象;否则显示对象。

示例:

lv_obj_set_hidden(label, true);

18. void lv_obj_align(lv_obj_t *obj, const lv_obj_t *base, lv_align_t align, lv_coord_t x_ofs, lv_coord_t y_ofs)

描述: 对齐对象到基对象。
参数:

  • lv_obj_t *obj: 指向要对齐的对象的指针。
  • const lv_obj_t *base: 指向基对象的指针。
  • lv_align_t align: 对齐方式。
  • lv_coord_t x_ofs: X 轴偏移量。
  • lv_coord_t y_ofs: Y 轴偏移量。

示例:

lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 0, 0);

19. void lv_task_create(lv_task_cb_t task_cb, uint32_t period, lv_task_prio_t prio, void *user_data)

描述: 创建一个新的任务。
参数:

  • lv_task_cb_t task_cb: 任务回调函数。
  • uint32_t period: 任务执行的周期(以毫秒为单位)。
  • lv_task_prio_t prio: 任务优先级。
  • void *user_data: 用户数据。

示例:

static void my_task(lv_task_t *task) {
    // Task code
}

lv_task_create(my_task, 1000, LV_TASK_PRIO_MID, NULL); // 每秒执行一次任务

20. void lv_anim_set_time(lv_anim_t *anim, uint32_t duration)

描述: 设置动画的持续时间。
参数:

  • lv_anim_t *anim: 指向动画对象的指针。
  • uint32_t duration: 持续时间(以毫秒为单位)。

示例:

lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_time(&a, 500); // 动画持续 500 毫秒

21. void lv_obj_set_style_local_value_str(lv_obj_t *obj, lv_style_value_t value, lv_state_t state)

描述: 设置对象的本地样式值字符串。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_style_value_t value: 样式值。
  • lv_state_t state: 状态。

示例:

lv_obj_set_style_local_value_str(label, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, "New Value");

综合示例

以下是一个综合示例,展示了如何使用上述函数创建和管理一个带有标签和按钮的简单界面:

#include "lvgl.h"
#include "gui_guider.h"
#include "events_init.h"
#include "custom.h"

lv_ui guider_ui;

static void btn_event_handler(lv_event_t *e) {
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t *btn = lv_event_get_target(e);
    
    if (code == LV_EVENT_CLICKED) {
        lv_label_set_text(guider_ui.label1, "Button clicked!");
    }
}

void app_main(void) {
    lv_init();
    
    // 初始化显示和输入设备
    lv_disp_drv_t disp_drv;
    lv_indev_drv_t indev_drv;
    lv_disp_drv_init(&disp_drv);
    lv_indev_drv_init(&indev_drv);
    lv_disp_drv_register(&disp_drv);
    lv_indev_drv_register(&indev_drv);

    // 初始化 GUI Guider
    lv_ui_init(&guider_ui);
    
    // 创建标签
    guider_ui.label1 = lv_label_create(lv_scr_act());
    lv_label_set_text(guider_ui.label1, "Hello, LVGL!");
    lv_obj_align(guider_ui.label1, LV_ALIGN_CENTER, 0, -40);
    
    // 创建按钮
    lv_obj_t *btn = lv_btn_create(lv_scr_act());
    lv_obj_set_size(btn, 100, 50);
    lv_obj_align(btn, LV_ALIGN_CENTER, 0, 40);
    lv_obj_add_event_cb(btn, btn_event_handler, LV_EVENT_CLICKED, NULL);

    // 加载主屏幕
    setup_scr_main_screen(&guider_ui);
    lv_scr_load(guider_ui.main_screen);
    
    // 主循环
    while (1) {
        lv_task_handler();
        vTaskDelay(1); // FreeRTOS 延迟
    }
}

通过这些函数和示例代码,你可以更好地理解和使用 GUI Guider 和 LVGL 来创建和管理用户界面。如果有更多问题或需要进一步的帮助,请告诉我。

当然,还有许多其他常用的 LVGL 函数可以用来创建和管理图形界面组件。下面是更多的常用函数及其介绍:

22. void lv_obj_add_flag(lv_obj_t *obj, lv_obj_flag_t flag)

描述: 为对象添加标志(例如使对象可点击、隐藏等)。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_obj_flag_t flag: 要添加的标志。

示例:

lv_obj_add_flag(btn, LV_OBJ_FLAG_CLICKABLE); // 使按钮对象可点击

23. void lv_obj_clear_flag(lv_obj_t *obj, lv_obj_flag_t flag)

描述: 清除对象的标志。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_obj_flag_t flag: 要清除的标志。

示例:

lv_obj_clear_flag(btn, LV_OBJ_FLAG_CLICKABLE); // 使按钮对象不可点击

24. void lv_obj_set_style_bg_color(lv_obj_t *obj, lv_color_t color, lv_state_t state)

描述: 设置对象的背景颜色。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_color_t color: 要设置的颜色。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_bg_color(btn, lv_color_hex(0xFF0000), LV_STATE_DEFAULT); // 设置按钮的背景颜色为红色

25. void lv_obj_set_style_radius(lv_obj_t *obj, lv_coord_t radius, lv_state_t state)

描述: 设置对象的圆角半径。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t radius: 圆角半径。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_radius(btn, 10, LV_STATE_DEFAULT); // 设置按钮的圆角半径为10

26. void lv_obj_set_style_border_width(lv_obj_t *obj, lv_coord_t width, lv_state_t state)

描述: 设置对象的边框宽度。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t width: 边框宽度。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_border_width(btn, 2, LV_STATE_DEFAULT); // 设置按钮的边框宽度为2

27. void lv_obj_set_style_border_color(lv_obj_t *obj, lv_color_t color, lv_state_t state)

描述: 设置对象的边框颜色。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_color_t color: 边框颜色。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_border_color(btn, lv_color_hex(0x00FF00), LV_STATE_DEFAULT); // 设置按钮的边框颜色为绿色

28. void lv_obj_set_style_text_font(lv_obj_t *obj, const lv_font_t *font, lv_state_t state)

描述: 设置对象的文本字体。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • const lv_font_t *font: 字体指针。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_text_font(label, &lv_font_montserrat_28, LV_STATE_DEFAULT); // 设置标签的字体为 Montserrat 28

29. void lv_obj_set_style_text_color(lv_obj_t *obj, lv_color_t color, lv_state_t state)

描述: 设置对象的文本颜色。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_color_t color: 文本颜色。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_text_color(label, lv_color_hex(0x0000FF), LV_STATE_DEFAULT); // 设置标签的文本颜色为蓝色

30. void lv_obj_add_event_cb(lv_obj_t *obj, lv_event_cb_t event_cb, lv_event_code_t filter, void *user_data)

描述: 为对象添加事件回调函数。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_event_cb_t event_cb: 事件回调函数。
  • lv_event_code_t filter: 过滤的事件代码。
  • void *user_data: 用户数据指针。

示例:

static void btn_event_handler(lv_event_t *e) {
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t *btn = lv_event_get_target(e);
    
    if (code == LV_EVENT_CLICKED) {
        printf("Button clicked\n");
    }
}

lv_obj_add_event_cb(btn, btn_event_handler, LV_EVENT_CLICKED, NULL); // 为按钮添加点击事件回调

31. void lv_obj_set_style_value_str(lv_obj_t *obj, const char *str, lv_state_t state)

描述: 设置对象的值字符串。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • const char *str: 值字符串。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_value_str(label, "Hello, LVGL!", LV_STATE_DEFAULT); // 设置标签的值字符串

32. void lv_obj_set_style_shadow_width(lv_obj_t *obj, lv_coord_t width, lv_state_t state)

描述: 设置对象的阴影宽度。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t width: 阴影宽度。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_shadow_width(btn, 10, LV_STATE_DEFAULT); // 设置按钮的阴影宽度为10

33. void lv_obj_set_style_shadow_color(lv_obj_t *obj, lv_color_t color, lv_state_t state)

描述: 设置对象的阴影颜色。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_color_t color: 阴影颜色。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_shadow_color(btn, lv_color_hex(0x888888), LV_STATE_DEFAULT); // 设置按钮的阴影颜色为灰色

34. void lv_obj_set_style_pad_all(lv_obj_t *obj, lv_coord_t pad, lv_state_t state)

描述: 设置对象的内边距。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t pad: 内边距大小。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_pad_all(btn, 5, LV_STATE_DEFAULT); // 设置按钮的内边距为5

35. void lv_obj_set_style_pad_top(lv_obj_t *obj, lv_coord_t pad, lv_state_t state)

描述: 设置对象的顶部内边距。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t pad: 顶部内边距大小。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_pad_top(btn, 10, LV_STATE_DEFAULT); // 设置按钮的顶部内边距为10

36. void lv_obj_set_style_pad_bottom(lv_obj_t *obj, lv_coord_t pad, lv_state_t state)

描述: 设置对象的底部内边距。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t pad: 底部内边距大小。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_pad_bottom(btn, 10, LV_STATE_DEFAULT); // 设置按钮的底部内边距为10

37. void lv_obj_set_style_pad_left(lv_obj_t *obj, lv_coord_t pad, lv_state_t state)

描述: 设置对象的左边内边距。
参数:

  • lv_obj_t *obj: 指向对象的指针。
  • lv_coord_t pad: 左边内边距大小。
  • lv_state_t state: 对象的状态。

示例:

lv_obj_set_style_pad_left(btn, 10, LV_STATE_DEFAULT); // 设置按钮的左边内边
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GUI Guider是恩智浦提供的用户友好型图形用户界面开发工具,可通过开源LVGL图形库快速开发高品质的显示。GUI Guider的拖放编辑器可以轻松利用LVGL的众多特性,如小部件、动画和样式来创建GUI,而只需少量代码或根本无需任何代码。\[2\]GUI Guider是恩智浦为LVGL开发的一个上位机GUI设计工具,可以通过拖放控件的方式设计LVGL GUI页面,加速GUI的设计,并提供C语言代码,方便嵌入到自己的项目中。\[3\]如果你想使用GUI Guider,你可以通过恩智浦官网下载软件,也可以通过百度网盘链接下载GUI Guider的最新版本。\[1\]在使用GUI Guider之前,建议先熟悉LVGL的各种组件,可以参考LVGL官方文档或百问网的中文版文档。\[2\]创建新的工程后,你就可以开始使用GUI Guider来设计和开发你的图形用户界面了。 #### 引用[.reference_title] - *1* *3* [快速入门GUI-guider](https://blog.csdn.net/mucherry/article/details/126830883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【LVGL】学习笔记--(2)GUI Guider的使用](https://blog.csdn.net/sinat_33408502/article/details/129236366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值