使用GUI Guider工具开发嵌入式GUI应用(6)-切换多screen换场景
本节将展示使用GUI Guider实现切换显示页面功能。
这里设计的用例是:
- 创建3张页面,
screen_0,screen_1和screen_2。 - 分别在每个页面上中放置一个Label(最简单的显示组件),分别填入不同的字符串,例如
Welcome,YOU,Hello等。 - 为每个页面创建触发事件,配置GUI Guider让3个页面循环切换。当上一个页面载入完成后,切换页面开始载入下一个页面,循环往复。

在GUI Guider编辑区的左上角,有页面管理窗口,鼠标单击对应的加号"+"按钮,就可以新建页面。如果要改新建页面的名字,不能在页面管理窗口中直接重命名,此时可在GUI Guider编辑区右侧的“属性设置”标签页改变“名字”中的内容。为了减少生成不必要的键盘组件,记得要把“是否显示键盘”的选项关闭。如图x所示。

然后,在“事件添加”标签页中,创建一个事件:
- 指定触发方式为“Loaded”,对应当载入本页面中所有的显示内容后,触发该事件
- 指定目标对象为“screen_1”,对应当该事件发生后,对页面screen_1进行操作
- 指定动作为“加载页面”,及加载screen_1的页面。这里还可以选择加载页面的速度为1000ms内启动加载,以及加载新的页面后停留多久1000ms,甚至还可以选择加载的特效为“move left”,即从右向左移入。

对新建的3个页面都是如此配置,即screen_0的载入完成后加载screen_1,screen_1加载完成后加载screen_2,screen_2加载完成后加载screen_0,形成循环。之后,就可以生成代码并仿真了。
在实际调试到这里的时候,发现了当前版本GUI Guider的一个Bug:生成C代码后使用模拟器运行,切换到screen_1就卡住了,不会继续切换screen_2。但是使用MicroPython的模拟器运行配置好的GUI Guider工程就可以正常切换。经过对比源码以及调试过程后发现,生成C代码中,确定最终能产生触发信号的一个判定条件未被合理使用,该排判定条件始终不能被满足,因此无法正确执行到预设的触发事件的语句。但在Python代码中,就避开了这个判断,从而能够正常切换页面。一个临时的解法,是人工改动GUI Guider生成events_init.c文件源码,将其中的d->prev_src == NULL这个判断条件屏蔽掉。见源码如下:
static void screen_0_event_handler(lv_event_t *e)
{
lv_event_code_t code = lv_event_get_code(e);
switch (code)
{
case LV_EVENT_SCREEN_LOADED:
{
lv_obj_t * act_scr = lv_scr_act();
lv_disp_t * d = lv_obj_get_disp(act_scr)

本文介绍了如何使用GUIGuider开发嵌入式GUI应用,涉及创建多个页面,配置事件以实现页面循环切换。遇到的Bug涉及到LVGL内核的判定条件,通过修改自动生成的C代码解决了问题。
最低0.47元/天 解锁文章
7911

被折叠的 条评论
为什么被折叠?



