使用GUI Guider工具開發嵌入式GUI應用 (3) - 使用label組件

使用GUI Guider工具開發嵌入式GUI應用 (3) - 使用label組件

文章目錄

  • 使用GUI Guider工具開發嵌入式GUI應用 (3) - 使用label組件
    • 引言
    • 在GUI Guider工程中創建label組件
    • 編譯MCU工程并下載到開發板

引言

本節講述在GUI Guider中,應用各種UI的基本元素,并順利部署到MCU的過程。在GUI Guider中使用各LVGL的組件時,將會涉及到GUI Guider的操作,以及將某些組件額外生成的源碼添加到Keil工程中。至于具體產品中的UI應用,可以是這些基本UI元素的組合使用,以實現更加豐富的顯示效果。

在本文中,將說明使用通過GUI Guider創建并使用LVGL的label組件顯示字符信息。

在GUI Guider工程中創建label組件

在新建GUI Guider工程搭建MCU運行時的框架工程時,曾使用了label組件實現在屏幕上顯示一個“Hello World”字符串的演示效果。Label是GUI Guider中最簡單的組件,可用于顯示字符。

當需要為某個頁面添加一個顯示字符串的對象時,可在編輯區域左邊的工具欄中選擇label按鈕,此時,在組件窗口中就可以看到,當前的頁面screen下出現了一個label_1的對象。如圖x所示。

在這里插入圖片描述

圖x 新增label對象

雙擊在當前頁面上出現的label對象,可以在編輯區域的右側激活該對象的屬性設置對話框,如圖x所示。在其中,可以執行該對象的名字、位置、文本內容、字體、顏色等屬性。當然,既然是在圖形編輯界面,對象的位置也可以通過在圖形編輯區拖拽對象來調整。

在這里插入圖片描述

圖x 編輯label對象屬性

然后,重新生成代碼。在運行時的Keil工程已經包含了靜態頁面的源文件,因此不用額外再執行添加文件的操作。但實際上,這里新生成的源碼位于./gui/generated/setup_scr_screen.c文件中。有源碼如下:

/** Copyright 2023 NXP* SPDX-License-Identifier: MIT* The auto-generated can only be used on NXP devices*/#include "lvgl.h"
#include <stdio.h>
#include "gui_guider.h"
#include "events_init.h"
#include "custom.h"void setup_scr_screen(lv_ui *ui){//Write codes screenui->screen = lv_obj_create(NULL);lv_obj_set_scrollbar_mode(ui->screen, LV_SCROLLBAR_MODE_OFF);//Set style for screen. Part: LV_PART_MAIN, State: LV_STATE_DEFAULTlv_obj_set_style_bg_color(ui->screen, lv_color_make(0xff, 0xff, 0xff), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_grad_color(ui->screen, lv_color_make(0x21, 0x95, 0xf6), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_grad_dir(ui->screen, LV_GRAD_DIR_NONE, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_opa(ui->screen, 0, LV_PART_MAIN|LV_STATE_DEFAULT);//Write codes screen_label_1ui->screen_label_1 = lv_label_create(ui->screen);lv_obj_set_pos(ui->screen_label_1, 51, 68);lv_obj_set_size(ui->screen_label_1, 218, 43);lv_obj_set_scrollbar_mode(ui->screen_label_1, LV_SCROLLBAR_MODE_OFF);lv_label_set_text(ui->screen_label_1, "Hello World");lv_label_set_long_mode(ui->screen_label_1, LV_LABEL_LONG_WRAP);//Set style for screen_label_1. Part: LV_PART_MAIN, State: LV_STATE_DEFAULTlv_obj_set_style_radius(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_color(ui->screen_label_1, lv_color_make(0x7c, 0x00, 0xff), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_grad_color(ui->screen_label_1, lv_color_make(0x21, 0x95, 0xf6), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_grad_dir(ui->screen_label_1, LV_GRAD_DIR_NONE, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_bg_opa(ui->screen_label_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_shadow_width(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_shadow_color(ui->screen_label_1, lv_color_make(0x21, 0x95, 0xf6), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_shadow_opa(ui->screen_label_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_shadow_spread(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_shadow_ofs_x(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_shadow_ofs_y(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_text_color(ui->screen_label_1, lv_color_make(0xff, 0xff, 0xff), LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_text_font(ui->screen_label_1, &lv_font_montserratMedium_32, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_text_letter_space(ui->screen_label_1, 2, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_text_line_space(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_text_align(ui->screen_label_1, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_pad_left(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_pad_right(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_pad_top(ui->screen_label_1, 8, LV_PART_MAIN|LV_STATE_DEFAULT);lv_obj_set_style_pad_bottom(ui->screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);
}

此時,可以通過預覽頁面,看到本頁面的靜態顯示效果。還可以通過運行模擬器,在GUI Guider中模擬UI程序運行時的動態效果(如果有動態效果)。如圖x所示。

在這里插入圖片描述

圖x 預覽編輯label對象的效果

編譯MCU工程并下載到開發板

編譯對應的Keil工程,啟動針對代碼量的優化,看下對存儲空間的占用。

Build started: Project: project
*** Using Compiler 'V6.18', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin'
Build target 'Target 1'
compiling clock_init.c...
compiling board_init.c...
compiling hal_crc.c...
compiling lcd_port.c...
compiling pin_init.c...
compiling lcd.c...
...
compiling events_init.c...
compiling gui_guider.c...
compiling lv_font_montserratMedium_16.c...
compiling lv_table.c...
compiling setup_scr_screen.c...
compiling lv_font_montserratMedium_32.c...
compiling lv_textarea.c...
linking...
Program Size: Code=154616 RO-data=64380 RW-data=148 ZI-data=29100  
".\Objects\project.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:14

下載程序到MCU并運行,可以看到,開發板上的顯示屏上也成功顯示了“同款”圖像。如圖x所示。

在這里插入圖片描述

圖x 在開發板上運行UI顯示label對象

本例使用的GUI Guider工程和Keil工程位于開源代碼倉庫:https://gitee.com/suyong_yq/lvgl-gui-guider-dev/tree/master/bird-f5_lvgl_v8/demo_apps/lvgl/lvgl_v8_gui_text

(未完待續。。。)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一、window配置微軟商店中的Ubuntu,及錯誤解決方法

&#xff08;1&#xff09;首先&#xff0c;在微軟商店中搜索“Ubuntu”&#xff0c;下載你喜歡的版本(此處) &#xff08;2&#xff09;設置適用于window的Linux子系統&#xff0c;跟著紅色方框走 點擊“確定”之后&#xff0c;會提示你重啟電腦&#xff0c;按要求重啟電腦即可…

Java多線程(4)---死鎖和Synchronized加鎖流程

目錄 前言 一.synchronized 1.1概念 1.2Synchronized是什么鎖&#xff1f; 1.3Synchronized加鎖工作過程 1.4其他優化操作 二.死鎖 2.1什么是死鎖 2.2死鎖的幾個經典場景 2.3死鎖產生的條件 2.4如何解決死鎖 &#x1f381;個人主頁&#xff1a;tq02的博客_CSDN博客…

設計模式 : 單例模式筆記

文章目錄 一.單例模式二.單例模式的兩種實現方式餓漢模式懶漢模式 一.單例模式 一個類只能創建一個對象,這樣的類的設計模式就稱為單例模式,該模式保證系統中該類只能有一個實例(并且父子進程共享),一個很典型的單例類就是CSTL的內存池C單例模式的基本設計思路: 私有化構造函數…

PyTorch翻譯官網教程-LANGUAGE MODELING WITH NN.TRANSFORMER AND TORCHTEXT

官網鏈接 Language Modeling with nn.Transformer and torchtext — PyTorch Tutorials 2.0.1cu117 documentation 使用 NN.TRANSFORMER 和 TORCHTEXT進行語言建模 這是一個關于訓練模型使用nn.Transformer來預測序列中的下一個單詞的教程。 PyTorch 1.2版本包含了一個基于論…

Shell編程——弱數據類型的腳本語言快速入門指南

目錄 Linux Shell 數據類型 變量類型 運算符 算術運算符 賦值運算符 拼接運算符 比較運算符 關系運算符 控制結構 順序結構 條件分支結構 if 條件語句 case 分支語句 循環結構 for 循環 while 循環 until 循環 break 語句 continue語句 函數 函數定義 …

Stable Diffusion Webui源碼剖析

1、關鍵python依賴 &#xff08;1&#xff09;xformers&#xff1a;優化加速方案。它可以對模型進行適當的優化來加速圖片生成并降低顯存占用。缺點是輸出圖像不穩定&#xff0c;有可能比不開Xformers略差。 &#xff08;2&#xff09;GFPGAN&#xff1a;它是騰訊開源的人臉修…

大數據掃盲(1): 數據倉庫與ETL的關系及ETL工具推薦

在數字化時代&#xff0c;數據成為了企業決策的關鍵支持。然而&#xff0c;隨著數據不斷增長&#xff0c;有效地管理和利用這些數據變得至關重要。數據倉庫和ETL工具作為數據管理和分析的核心&#xff0c;將幫助企業從龐雜的數據中提取有價值信息。 一、ETL是什么&#xff1f; …

【不限于聯想Y9000P電腦關蓋再打開時黑屏的解決辦法】

不限于聯想Y9000P電腦關蓋再打開時黑屏的解決辦法 問題的前言問題的出現問題擬解決 問題的前言 事情發生在昨天&#xff0c;更新了Win11系統后&#xff1a; 最惹人注目的三處地方就是&#xff1a; 1.可以查看時間的秒數了&#xff1b; 2.右鍵展示的內容變窄了&#xff1b; 3.按…

Pycharm 雙擊啟動失敗?

事故 雙擊 Pycharm 后&#xff0c;出現加載工程&#xff0c;我不想加載這個工程&#xff0c;就點擊了彈出的 cancle 取消按鈕。然后再到桌面雙擊 Pycharm 卻發現無法啟動了。哪怕以管理員權限運行也沒用&#xff0c;就是不出界面。 原因未知 CtrlshiftESC 打開后臺&#xff…

【騰訊云 Cloud Studio 實戰訓練營】Hexo 框架 Butterfly 主題搭建個人博客

什么是Cloud Studio Cloud Studio 是基于瀏覽器的集成式開發環境&#xff08;IDE&#xff09;&#xff0c;為開發者提供了一個永不間斷的云端工作站。用戶在使用 Cloud Studio 時無需安裝&#xff0c;隨時隨地打開瀏覽器就能在線編程。 ? Hexo 博客成品展示 本人博客如下&…

leetcode268. 丟失的數字

這題簡單的有點過分了吧。。。 一開始還納悶會不會有重復的元素&#xff0c;后來看到[0,n]范圍&#xff0c;那么肯定有n1個數字&#xff0c;然后要在n 個數字里面找誰沒有&#xff0c;那肯定沒有重復的元素&#xff0c;如果有重復&#xff0c;就不止缺少一個元素了。 思路&am…

【Spring】-Spring項目的創建

作者&#xff1a;學Java的冬瓜 博客主頁&#xff1a;?冬瓜的主頁&#x1f319; 專欄&#xff1a;【Framework】 主要內容&#xff1a;創建spring項目的步驟&#xff1a;先創建一個maven項目&#xff0c;再在pom.xml中添加spring框架支持&#xff0c;最后寫一個啟動類。 文章目…

Field injection is not recommended

文章目錄 1. 引言2. 不推薦使用Autowired的原因3. Spring提供了三種主要的依賴注入方式3.1. 構造函數注入&#xff08;Constructor Injection&#xff09;3.2. Setter方法注入&#xff08;Setter Injection&#xff09;3.3. 字段注入&#xff08;Field Injection&#xff09; 4…

03 QT基本控件和功能類

一 進度條 、水平滑動條 垂直滑動條 當在QT中,在已知類名的情況下,要了解類的構造函數 常用屬性 及 信號和槽 常用api 特征:可以獲取當前控件的值和設置它的當值 ---- int ui->progressBar->setValue(value); //給進度條設置一個整型值 ui->progressBar->value…

計算機視覺五大核心研究任務全解:分類識別、檢測分割、人體分析、三維視覺、視頻分析

目錄 一、引言1.1 計算機視覺的定義1.1.1 核心技術1.1.2 應用場景 1.2 歷史背景及發展1.2.1 1960s-1980s: 初期階段1.2.2 1990s-2000s: 機器學習時代1.2.3 2010s-現在: 深度學習的革命 1.3 應用領域概覽1.3.1 工業自動化1.3.2 醫療圖像分析1.3.3 自動駕駛1.3.4 虛擬現實與增強現…

【Linux】進程調度

進程調度 硬件向OS發送時間中斷 --> 系統時鐘硬件會進行時間計數&#xff0c;每隔一段很短的時間會向OS發送時鐘中斷&#xff0c;處理中斷&#xff0c;檢測進程時間片 --> 收到中斷&#xff0c;OS就會不斷定期地執行對應的時鐘中斷處理方法&#xff0c;檢查當前進程的時…

山東布谷科技直播軟件開發WebRTC技術:建立實時通信優質平臺

在數字化的時代&#xff0c;實時通信成為了人們遠程交流的主要方式&#xff0c;目前市場上也出現了很多帶有實時通信交流的軟件&#xff0c;實時通信符合人們現在的需求&#xff0c;所以在直播軟件開發過程中&#xff0c;開發者也運用了實時通信技術為直播軟件加入了實時通信的…

【計算機視覺|生成對抗】生成對抗網絡(GAN)

本系列博文為深度學習/計算機視覺論文筆記&#xff0c;轉載請注明出處 標題&#xff1a;Generative Adversarial Nets 鏈接&#xff1a;Generative Adversarial Nets (nips.cc) 摘要 我們提出了一個通過**對抗&#xff08;adversarial&#xff09;**過程估計生成模型的新框架…

mybatisplus學習筆記

1.踩過的坑 1.MybatisPlus 要與其代碼生成器的版本一致&#xff1b; 2.要使用新版代碼&#xff08;3.5.1及以上&#xff09;生成器則要使用springboot3&#xff0c;如果用springboot2使用新版代碼生成器會導致builder.parent(“com.sdfsf”) // 設置父包名》重復&#xff01;&…

2.阿里云對象存儲OSS

1.對象存儲概述 文件上傳&#xff0c;是指將本地圖片、視頻、音頻等文件上傳到服務器上&#xff0c;可以供其他用戶瀏覽或下載的過程。文件上傳在項目中應用非常廣泛&#xff0c;我們經常發抖音、發朋友圈都用到了文件上傳功能。 實現文件上傳服務&#xff0c;需要有存儲的支持…