lvgl切换页面卡死

Viewed 45

问题描述


在例程ai_lvgl.py的基础上新增加俩个页面,通过按钮或串口标志位进行切换,在user_gui_init界面中点击开始,后切换到ai检测界面,识别到物品后再次切换页面,但是新切换的页面无论是滑动窗口还是退出按钮点击后程序都会卡死退出,可能是什么原因造成的,我应该如何修改

复现步骤


def user_gui_init():
res_path = "/sdcard/examples/15-LVGL/data/"

# ====================== 第一步:先加载背景图(最底层)======================
with open(res_path + 'img/lvgl_ready.png', 'rb') as f:
    img_data = f.read()

img_dsc = lv.img_dsc_t({
    'data_size': len(img_data),
    'data': img_data
})

bg_img = lv.img(lv.scr_act())
bg_img.set_src(img_dsc)
bg_img.align(lv.ALIGN.CENTER, 0, 0)

# 中文
chinese_font = lv.freetype_font_create("/sdcard/res/font/SourceHanSansSC-Normal-Min.ttf", 35, 0)
if not chinese_font:
    raise Exception("Failed to load fonts")

cz_label = lv.label(lv.scr_act())
cz_label.set_style_text_font(chinese_font, 0)
cz_label.set_text("博物馆文物智能导视系统")
cz_label.set_width(400)
cz_label.align(lv.ALIGN.CENTER, 0, 0)  # 正中心显示


# ====================== 第三步:最后放按钮(最上层)======================
btn = lv.btn(lv.scr_act())
btn.align(lv.ALIGN.CENTER, 0, 100)
label = lv.label(btn)
label.set_style_text_font(chinese_font, 0)
label.set_text("开始")
btn.set_user_data(label)
btn.add_event(btn_clicked_event1, lv.EVENT.CLICKED,None )

def user_gui1():

global scr,sensor_img
res_path = "/sdcard/examples/15-LVGL/data/"
font_simsun_16_cjk = lv.freetype_font_create("/sdcard/res/font/SourceHanSansSC-Normal-Min.ttf", 16, 0)

scr = lv.scr_act()

# 设置屏幕背景完全透明
lv.scr_act().set_style_bg_opa(lv.OPA.TRANSP, lv.PART.MAIN)

# 创建一个半透明的侧边栏
label = lv.obj(scr)
label.set_size(100, 480)
label.set_pos(700, 0)
label.set_style_bg_color(lv.color_hex(0x000000), lv.PART.MAIN)
label.set_style_bg_opa(50, lv.PART.MAIN)
label.set_style_border_width(0, lv.PART.MAIN)

# yolov8检测按钮
btn1 = lv.btn(scr)
btn1.set_size(90, 45)
btn1.set_pos(705, 20)
btn1.set_style_radius(20, lv.PART.MAIN)
btn1.set_style_bg_color(lv.color_hex(0x0000FF), lv.PART.MAIN)
btn1.set_style_bg_opa(255, lv.PART.MAIN)  # 不透明背景
btn1.add_event(btn_clicked_yolo_det, lv.EVENT.CLICKED, None)
label1 = lv.label(btn1)
label1.set_style_text_font(font_simsun_16_cjk, 0)
label1.set_text("文物识别")

# 人脸检测按钮
btn2 = lv.btn(scr)
btn2.set_size(90, 45)
btn2.set_pos(705, 75)
btn2.set_style_radius(20, lv.PART.MAIN)
btn2.set_style_bg_color(lv.color_hex(0x0000FF), lv.PART.MAIN)
btn2.set_style_bg_opa(255, lv.PART.MAIN)  # 不透明背景
btn2.add_event(btn_clicked_face_det, lv.EVENT.CLICKED, None)
label2 = lv.label(btn2)
label2.set_style_text_font(font_simsun_16_cjk, 0)
label2.set_text("人脸识别")

lv.scr_load(scr)

def user_gui2(text=""):
res_path = "/sdcard/examples/15-LVGL/data/"

# ====================== 背景图 ======================
with open(res_path + 'img/lvgl_ready.png', 'rb') as f:
    img_data = f.read()

img_dsc = lv.img_dsc_t({
    'data_size': len(img_data),
    'data': img_data
})

scr = lv.obj()
lv.scr_load(scr)

bg_img = lv.img(scr)
bg_img.set_src(img_dsc)
bg_img.align(lv.ALIGN.CENTER, 0, 0)

# ====================== 字体 ======================
font_simsun_20_cjk = lv.freetype_font_create("/sdcard/res/font/SourceHanSansSC-Normal-Min.ttf", 20, 0)

# ====================== 滚动区域 ======================
scrollable_area = lv.obj(scr)
scrollable_area.set_size(640, 380)
scrollable_area.set_pos(20, 20)

# 开启滚动
scrollable_area.add_flag(lv.obj.FLAG.SCROLLABLE)

# 只允许竖直滚动
scrollable_area.set_scroll_dir(lv.DIR.VER)

# 样式
scrollable_area.set_style_bg_color(lv.color_hex(0xFFFFFF), lv.PART.MAIN)
scrollable_area.set_style_bg_opa(200, lv.PART.MAIN)
scrollable_area.set_style_border_width(2, lv.PART.MAIN)

# ====================== 文本 ======================
cz_label = lv.label(scrollable_area)
cz_label.set_style_text_font(font_simsun_20_cjk, 0)

# 自动换行
cz_label.set_width(560)
cz_label.set_long_mode(lv.label.LONG.WRAP)

cz_label.set_text(text)

# ====================== 侧边栏 ======================
sidebar = lv.obj(scr)
sidebar.move_foreground()
sidebar.set_size(100, 480)
sidebar.set_pos(700, 0)
sidebar.set_style_bg_color(lv.color_hex(0x000000), lv.PART.MAIN)
sidebar.set_style_bg_opa(50, lv.PART.MAIN)
sidebar.set_style_border_width(0, lv.PART.MAIN)

# ====================== 按钮 ======================
btn1 = lv.btn(scr)
btn1.move_foreground()
btn1.set_size(90, 45)
btn1.set_pos(705, 20)
btn1.set_style_radius(20, lv.PART.MAIN)
btn1.set_style_bg_color(lv.color_hex(0x0000FF), lv.PART.MAIN)
btn1.set_style_bg_opa(50, lv.PART.MAIN)

btn1.add_event(btn_clicked_event2, lv.EVENT.CLICKED, None)

label1 = lv.label(btn1)
label1.set_style_text_font(font_simsun_20_cjk, 0)
label1.set_text("退出")

硬件板卡


K230

软件版本


CanMV_K230_V3P0_micropython_v1.3-0-g8dd764f_nncase_v2.9.0

user_gui_init页面直接按钮切换gui2时gui2正常,但是从ai检测页面切换到gui2是gui2就会卡死

1 Answers

你好,可以贴一下完整的脚本吗?以及可以看一下串口日志吗?