概念
LVGL 中可触发事件,用于与用户进行交互。例如一个对应对象的事件可以有:
被点击
被拖拽
数值被更改
等等
注意:多个对象可以使用同一回调函数。
事件类型
通用事件
所有对象(例如 Buttons / Labels / Sliders 等)都将接收这些通用事件,而不管它们的类型如何。
输入设备事件
当用户按下/释放对象时发送这些消息。它们不仅用于指针,还可以用于键盘,编码器和按钮输入设备。
例如,常用的事件有:
lvgl.EVENT_PRESSED – 对象象被按下时触发,每次按下时只触发一次
lvgl.EVENT_PRESSING – 对象正在被按下中,只要按下不放,就会一直被触发
lvgl.EVENT_CLICKED – 对象被点击
指针相关事件
这些事件由类似指针的输入设备(例如鼠标或触摸板)触发
lvgl.EVENT_DRAG_BEGIN – 开始拖动对象
lvgl.EVENT_DRAG_END – 拖动完成
lvgl.EVENT_DRAG_THROW_BEGIN – 拖动漂移开始时触发
按键事件
这些事件由键盘和编码器输入设备发送。
lvgl.EVENT_KEY – 按下了某个按键
lvgl.EVENT_FOCUSED – 当对象在其所在的 group 组获得焦点时触发
lvgl.EVENT_DEFOCUSED – 当对象在其所在的 group 组失去焦点时触发
一般事件
LVGL库发送的其他一般事件。
lvgl.EVENT_DELETE – 该对象正在被删除。释放相关的用户分配数据。
特殊事件
这些事件特定于特定的对象类型。
lvgl.EVENT_VALUE_CHANGED – 对象值已更改(例如,对于滑动条)
lvgl.EVENT_INSERT – 有内容插入到对象中。(通常到文本区域)
lvgl.EVENT_APPLY – 单击"确定",“应用"或类似的特定按钮。(通常来自键盘对象)
lvgl.EVENT_CANCEL – 单击"关闭”,"取消"或类似的特定按钮。(通常来自键盘对象)
lvgl.EVENT_REFRESH – 查询以刷新对象。永远不会由库发送,但可以由用户发送。
请访问特定对象类型的文档,以了解对象类型使用了哪些事件。
手动发送事件
任意事件
若要手动发送事件到对象,请使用 lvgl.event_send(obj, lvgl.EVENT_…, data) 。
刷新事件
lvgl.EVENT_REFRESH 是特殊事件,因为它旨在供用户用来通知对象刷新自身。一些例子:
通知标签根据一个或多个变量(例如当前时间)刷新其文本
语言更改时刷新标签
如果满足某些条件,请启用按钮(例如,输入正确的PIN)
如果超出限制,则向对象添加样式/从对象删除样式等
处理类似情况的最简单方法是利用以下函数:
lvgl.event_send_refresh(obj) 只是 lvgl.event_send(obj, lvgl.EVENT_REFRESH, nil) 的包装。因此,它仅向对象发送 lvgl.EVENT_REFRESH 。
lvgl.event_send_refresh_recursive(obj) 将 lvgl.EVENT_REFRESH 事件发送给对象及其所有子对象。如果将 nil 作为参数传递,则将刷新所有显示的所有对象。