龙芯1b(LS1B200)使用LVGL7.0.1组件 按钮矩阵 实现简易计算器

需求:通过按钮点击实现加减乘除的简易计算器。

1.我们使用矩阵按钮(lv_btnmatrix)快速创建布局,文本框(lv_textarea)显示结果

2.在按钮回调中将点击结果加入文本框上显示。

矩阵按钮相对于普通按钮:

对于基于网格的按钮布局,按钮矩阵更易于使用。
每个按钮矩阵消耗的内存少得多。

lv_obj_t * calc_ta=NULL ;//矩阵按钮对象
double calc_result=0;//计算结果
char textbuf[50];//字符串缓存
static const char * calc_btnm_map[] = {"""\xE6\xB8\x85"/*清*/"""\xE9\x99\xA4"/*除*/"","\n",
                                       "7", "8", "9","/","\n",
                                       "4", "5","6","*","\n",
                                       "1", "2", "3", "-","\n",
                                       ".","0","=","+",
                                       ""
                                      };//最后一个元素必须为空字符串!

//计算器按钮回调事件
void calc_event_handler(lv_obj_t * obj, lv_event_t event)
{
    if(event == LV_EVENT_CLICKED)
    {
        const char * txt = lv_btnmatrix_get_active_btn_text(obj);

        if(!strcmp(txt,"="))
        {
            //计算结果显示

            sprintf(textbuf,"%s\n",lv_textarea_get_text(calc_ta));//格式字符串
            calc_result = EvaluateExpression(textbuf);//将字符串(例如:1+2-3/3)传入计算函数中 返回计算结果
            if((calc_result - (int)calc_result) == 0)//无小数则取整数
            {
                sprintf(textbuf,"%d",(int)calc_result);
            }
            else
            {

                sprintf(textbuf,"%lf",calc_result);//calc_result 转换为字符串

            }
         
            lv_textarea_set_text(calc_ta,textbuf);//文本框显示计算结果
        }
        else if(!strcmp(txt,"""\xE6\xB8\x85"/*清*/"""\xE9\x99\xA4"/*除*/""))
        {
            calc_result=0;
            lv_textarea_set_text(calc_ta,"");
        }
        else
        {
            lv_textarea_add_text(calc_ta,txt);//将1-9 +-*/ 加入文本框中
        }
    }
}


//绘制简易计算器UI
void init_ui_calc(lv_obj_t *par)
{

    //创建一个容器对象 存放按钮矩阵
    lv_obj_t * cont = lv_cont_create(par, NULL);
    //设置容器的大小和位置
    lv_obj_set_size(cont, 480, 450);
    lv_obj_align(cont, NULL, LV_ALIGN_CENTER, 80, 0);
    //设置容器的布局为LV_LAYOUT_COLUMN_LEFT
    lv_cont_set_layout(cont, LV_LAYOUT_COLUMN_MID);



    //文本框 用于显示数据
    calc_ta = lv_textarea_create(cont, NULL);
    lv_obj_set_size(calc_ta, 470, 50);
    lv_textarea_set_text_align(calc_ta, LV_LABEL_ALIGN_LEFT);
    lv_textarea_set_text(calc_ta,"");


    //按钮矩阵
    lv_obj_t * btnm = lv_btnmatrix_create(cont,0);
    lv_btnmatrix_set_map(btnm,calc_btnm_map);
    lv_obj_set_event_cb(btnm, calc_event_handler);
    //lv_obj_set_size(obj,width,height)
    lv_obj_set_size(btnm,470,350);

}

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值