LVGL-常用组件

LVGL库提供了一系列组件,用于构建用户界面的基本元素。这些组件包括但不限于按钮、标签、文本框、列表、滑块、图表等。每个组件都具有独特的功能和样式,开发者可以通过设置属性和样式来定制它们的外观和行为,以满足特定应用场景的需求。

以下介绍LVGL常用组件,使用以下组件可以实现绝大部分界面需求。若需了解所有的组件及其API说明,可以访问LVGL官网查看。

LVGL基础对象#

概述-LVGL#

基础对象实现了屏幕上组件的基本属性,例如:

  • 坐标

  • 父对象

  • 基于父对象的后代

  • 包含样式

  • 诸如可点击(Clickable)、可滚动(Scrollable) 等属性。

基础对象是 LVGL 中所有组件的基类,其他组件对象均继承自基础对象。

基础对象可以直接用作一个简单的组件:它就是一个矩形。在没有指定父类对象的时候,一个基础对象就独自构成一个LVGL界面。在指定父类对象的时候,它是一个容器。

坐标(Coordinates)#
大小(Size)#

您可以使用set_width(new_width)set_height(new_height)设置或修改单个轴上的对象大小,或者可以使用set_size(new_width, new_height)同时修改两个轴 。

位置(Position)#

您可以使用set_x(new_x)set_y(new_y)设置相对于父级的位置,或者使用set_pos(new_x, new_y)来同时设置两个轴的位置。

对齐(Alignment)#

可以使用设置align(对齐)设置一个控件相对于父容器的对齐方式,Quecpython接口有下面两个:

  • obj.align(lvgl.ALIGN.type,x,y)
  • obj.set_align(lvgl.ALIGN.type)

如果设置居中,有快捷接口obj.center()

LVGL支持的对齐方式见下图:

image-20230726163115149

例如,以下代码会将对象从其父对象的中心移动 10(x),20(y) 像素:

import lvgl as lv

obj = lv.obj(lv.scr_act())

obj.set_align(lv.ALIGN.CENTER);
obj.set_pos(10, 20);

//Or in one function
obj.align(lv.ALIGN.CENTER, 10, 20);
父对象和子对象(Parents and children)#

除了界面对象,所有LVGL组件对象都有父对象。

父对象和子对象具有以下特点:

  • 一起移动
  • 子对象仅在父对象范围可见

组件对象在创建的时候,就需要指定父级对象。您可以使用 obj.set_parent(new_parent)为对象设置新的父级。要获取当前父级,请使用 obj.get_parent()

要获取父对象的特定子对象,请使用obj.get_child(idx)。 idx 的一些示例:

  • 0 获取创建的第一个子对象

  • 1 获取创建的第二个子对象

  • -1 获取最后创建的子对象

父级的子对象们可以这样迭代:

for i in range(obj.get_child_cnt()):
    child_obj = obj.get_child(i)

obj.get_index()返回对象在其父对象中的索引。

您可以使用obj.move_foreground()obj.move_background()将对象移到前台或将其移到后台。

显示和屏幕(Display and Screens)#

在 LVGL 中,对象层次结构的最高级别是 display,它代表显示设备(物理显示器或模拟器)的驱动程序,LVGL与显示设备的关联在前面的章节已有描述,不做赘述。 一个显示器可以有一个或多个与其相关联的界面。 每个界面都包含图形组件的对象层次结构。

当你创建了一个像screen = lv.obj()这样的界面对象时,你可以用lv.scr_load(screen)激活它。

lv.scr_act() 函数为当前活动的界面对象。

事件(Events)-LVGL#

要为对象设置事件回调,请使用 obj.add_event_cb(event_cb, lv.EVENT.type, user_data)

要手动向对象发送事件,请使用 lv.event_send(obj, lv.EVENT.type, param)

请阅读 事件概述 章节,以了解有关事件的更多信息。

样式(Styles)#

可以使用obj.add_style(new_style, selector)函数向对象添加新样式。

selector可以组合使用。 例如:lv.PART.SCROLLBAR | lv.STATE.PRESSED

基础对象的selector使用lv.PART.MAINlv.PART.SCROLLBAR

请阅读 样式概述 章节详细了解。

宏开关(Flags)#

有一些属性可以通过obj.add/clear_flag(lv.obj.FLAG.type)启用/禁用。lv.obj.FLAG.type见API常量。

API#

注意:本章节只介绍了一些常见API,如需查看所有API,可以访问LVGL官网查看。

以下描述均默认import lvgl as lv

构造函数-LVGL#
lv.obj(parent)#

创建一个基础对象(矩形)。

参数描述:

  • parent - 父对象,object类型,不指定则创建的是界面对象。
方法-LVGL#
obj.add_style(style_obj,selector)#

给对象添加样式。

参数描述:

  • style_obj - 样式对象,style_obj类型,要添加的样式。
  • selector - 选择器,常量,要添加样式的部分及状态,可以组合使用。 例如:lv.PART.SCROLLBAR | lv.STATE.PRESSED
obj.add_flag(type)#

给对象添加宏开关。

参数描述:

  • type - flag类型,常量,要添加的宏开关类型,可以一个或多个类型。
obj.clear_flag(type)#

清除对象的宏开关。

参数描述:

  • type - flag类型,常量,要清除的宏开关类型,可以多个类型。
obj.add_state(state)#

向对象添加一个或多个状态。其他状态位将保持不变。如果在样式中指定,则过渡动画将从以前的状态开始到当前状态。

参数描述:

  • state - state类型,常量,要添加的状态类型,可以一个或多个状态 。
obj.clear_state(state)#

删除对象的一个或多个状态。其他状态位将保持不变。如果在样式中指定,则过渡动画将从以前的状态开始到当前状态。

参数描述:

  • state - state类型,常量,要清除的状态类型,可以一个或多个状态 。
obj.get_state()#

获取对象的状态。

常量-LVGL#
flag#

宏开关

  • lv.obj.FLAG.HIDDEN 隐藏对象
  • lv.obj.FLAG.CLICKABLE 使输入设备可点击对象
  • lv.obj.FLAG.CLICK_FOCUSABLE 单击时将焦点状态添加到对象
  • lv.obj.FLAG.CHECKABLE 对象被点击时切换选中状态
  • lv.obj.FLAG.SCROLLABLE 使对象可滚动
  • lv.obj.FLAG.SCROLL_ELASTIC 允许在内部滚动但速度较慢
  • lv.obj.FLAG.SCROLL_MOMENTUM 在“抛出”时使对象滚动得更远
  • lv.obj.FLAG.SCROLL_ONE 只允许滚动一个可捕捉的子对象
  • lv.obj.FLAG.SCROLL_CHAIN 允许将滚动传播到父级
  • lv.obj.FLAG.SCROLL_ON_FOCUS 自动滚动对象以使其在聚焦时可见
  • lv.obj.FLAG.SNAPPABLE 如果在父对象上启用了滚动捕捉,它可以捕捉到这个对象
  • lv.obj.FLAG.PRESS_LOCK 保持对象被按下,即使按下从对象上滑动
  • lv.obj.FLAG.EVENT_BUBBLE 也将事件传播给父级
  • lv.obj.FLAG.GESTURE_BUBBLE 将手势传播给父级
  • lv.obj.FLAG.ADV_HITTEST 允许执行更准确的命中(点击)测试。例如。考虑圆角。
  • lv.obj.FLAG.IGNORE_LAYOUT 使对象可以通过布局定位
  • lv.obj.FLAG.FLOATING 父滚动时不滚动对象,忽略布局
PART#
  • lv.PART.MAIN 类似矩形的背景
  • lv.PART.SCROLLBAR 滚动条部分
  • lv.PART.INDICATOR 指示部分,例如用于圆弧、条、开关或复选框的勾选框
  • lv.PART.KNOB 向圆弧的帽子部分
  • lv.PART.SELECTED 表示当前选择的选项或部分
  • lv.PART.ITEMS 如果小部件有多个相似的元素(例如表格单元格)
  • lv.PART.TICKS 刻度上的刻度,例如对于图表或仪表
  • lv.PART.CURSOR 标记一个特定的地方,例如文本区域或图表的光标
  • lv.PART.CUSTOM_FIRST 可以从这里添加自定义部件。
state#
  • lv.STATE.DEFAULT 正常, 释放状态默认状态
  • lv.STATE.CHECKED 切换或者选中状态
  • lv.STATE.FOCUSED 被按键或者编码器聚焦/被触摸屏或鼠标点击
  • lv.STATE.FOCUS_KEY 被按键或者编码器聚焦但不是被触摸屏或鼠标点击
  • lv.STATE.EDITED 被编码器编辑
  • lv.STATE.HOVERED 鼠标悬停(暂不支持)
  • lv.STATE.PRESSED 被按住
  • lv.STATE.SCROLLED 正在滚动
  • lv.STATE.DISABLED 失效状态
flex-flow#
  • lv.FLEX_FLOW.ROW 将子对象排成一行而换行
  • lv.FLEX_FLOW.COLUMN 将子对象放在一列中而不换行
  • lv.FLEX_FLOW.ROW_WRAP 将子对象排成一排,不超过父容器的宽,否则换行
  • lv.FLEX_FLOW.COLUMN_WRAP 将子对象放成一列,不超过父容器的高,否则换行
  • lv.FLEX_FLOW.ROW_REVERSE 将子对象排成一行而不换行,但顺序相反
  • lv.FLEX_FLOW.COLUMN_REVERSE 将子对象放在一列中,不换行,但顺序相反
  • lv.FLEX_FLOW.ROW_WRAP_REVERSE 将子对象排成一行而不换行,但顺序相反
  • lv.FLEX_FLOW.COLUMN_WRAP_REVERSE 将子对象放在一列中,不换行,但顺序相反

标签(label)#

概述-label#

标签是用来显示文本的对象类型。

部分和风格(Parts and Styles)-label#

  • lv.PART.MAIN表示整个背景和文本部分。 填充值可用于在文本和背景之间添加间隙。
  • lv.PART.SCROLLBAR 当文本大于组件的大小时显示的滚动条。
  • lv.PART.SELECTED 表示所选文本的部分。 只能使用 text_color 和 bg_color 样式属性。

用法(Usage)-label#

设置文本(Set text)#

您可以在LVGL运行时使用 label.set_text("New text") 设置标签上的文本。

换行符由标签对象自动处理。 您可以使用 \n 来换行。 例如:"line1\nline2\n\nline4"

长模式(long mode)#

默认情况下,标签的大小会自动扩展到文本大小。 如果显式设置宽度或高度(使用例如label.set_size 或布局),则可以根据几种长模式策略来操作比标签宽度更宽的行。 类似地,如果文本的高度大于标签的高度,则可以应用策略。

  • lv.label.LONG.WRAP 文本太长,将被剪裁。 (默认)
  • lv.label.LONG.DOT 将标签右下角的最后 3 个字符替换为点 (.)
  • lv.label.LONG.SCROLL 如果文本比标签宽,则水平来回滚动它。如果它更高,垂直滚动。只滚动一个方向,水平滚动的优先级更高。
  • lv.label.LONG.SCROLL_CIRCULAR 如果文本比标签宽,则水平滚动它。如果它更高,请垂直滚动。只滚动一个方向,水平滚动的优先级更高。
  • lv.label.LONG.CLIP 只需剪掉标签外的文本部分。

您可以使用 label.set_long_mode(type) 指定长模式。

事件(Events)-label#

标签组件不发送特殊事件。

可以使用lv.obj.FLAG.CLICKABLE 使标签变成可点击对象,这样它近似于一个透明的按钮,可以添加点击事件。

API-label#

注意:本章节只介绍了一些常见API,如需查看所有API,可以访问LVGL官网查看。

构造函数-label#
lv.label(parent)#

创建一个标签。

参数描述:

  • parent - 父对象,object类型,必填。
方法-label#
label.set_text(text)#

给标签设置显示文本。

参数描述:

  • text - 文本内容,string类型,要显示的文本。
label.set_long_mode(type)#

给标签设置长文本模式。

参数描述:

  • type - 模式,常量,长文本模式。
label.get_text()#

获取标签的显示文本。

返回值描述:

  • text - 文本内容,string类型,显示的文本。
常量-label#
LONG#

长文本模式

  • lv.label.LONG.WRAP 文本太长,将被剪裁。 (默认)
  • lv.label.LONG.DOT 将标签右下角的最后 3 个字符替换为点 (.)
  • lv.label.LONG.SCROLL 如果显示文本比标签宽,则水平来回滚动它。如果它更高,垂直滚动。只滚动一个方向,水平滚动的优先级更高。
  • lv.label.LONG.SCROLL_CIRCULAR 如果文本比标签宽,则水平滚动它。如果它更高,垂直滚动。只滚动一个方向,水平滚动的优先级更高。
  • lv.label.LONG.CLIP 只需剪掉标签外的文本部分。

图像(image)#

概述-image#

图像是显示来自闪存(作为数组)或来自文件的图像的基本对象。 图像也可以显示符号(lv.SYMBOL....)。

部分和风格(Parts and Styles)-image#

  • lv.PART.MAIN表示整个背景和图像部分。

用法(Usage)-image#

图片来源(Image source)#

为了提供最大的灵活性,图像的来源可以是:

  • 文件系统的文件。
  • Symbols图标。

要设置图像的来源,请使用img.set_src(src)

要使用文件系统的文件,请将图片文件下载至文件系统,使用img.set_src("U:/my_img.jpg")

您还可以设置类似于标签的符号。 在这种情况下,图像将根据样式中指定的 font 呈现为文本。 它其实是一个轻量级单色“字母”而不是真实图像。 你可以设置像img.set_src(lv.SYMBOL.OK)这样的符号。

转换(Transformations)-image#

使用 img.set_zoom(factor) 图像将被缩放。 将 factor 设置为 256 为原图大小。 较大的值会放大图像(例如“512”双倍尺寸),较小的值会缩小图像(例如“128”半尺寸)。 分数尺度也有效。 例如。 281 放大 10%。

要旋转图像,请使用 img.set_angle(angle)。 角度的精度为 0.1 度,因此对于 45.8° 设置 458。

默认情况下,旋转的轴心点是图像的中心。 它可以通过 img.set_pivot(pivot_x, pivot_y) 改变。 0;0 是左上角。

转换的质量可以通过 img.set_antialias(True/False) 来调整。 启用抗锯齿后,转换质量更高但速度更慢。

请注意,图像对象的真实坐标在转换过程中不会改变。 即obj.get_width/height/x/y() 将返回原始的、未缩放的坐标。

事件(Events)-image#

图像组件不发送特殊事件。

可以使用lv.obj.FLAG.CLICKABLE 使标签变成可点击对象,这样它近似于一个图像按钮,可以添加点击事件。

注意:图像组件能使用图片缓存机制,所以相较于图像按钮组件,更推荐使用图像组件。

API-image#

注意:本章节只介绍了一些常见API,如需查看所有API,可以访问LVGL官网查看。

构造函数-image#
lv.img(parent)#

创建一个图像。

参数描述:

  • parent - 父对象,object类型,必填。
方法-image#
img.set_src(src)#

给图像设置图像源。

参数描述:

  • src - 1)图像文件的路径,string类型,要显示的图像的路径。2)SYMBOL,例如lv.SYMBOL.OK
img.set_offset_x(x)#

为图像的源设置x轴偏移,以便从新原点显示图像。

参数描述:

  • x - x轴偏移,int类型。
img.set_offset_y(y)#

为图像的源设置y轴偏移,以便从新原点显示图像。

参数描述:

  • y - y轴偏移,int类型。
img.set_angle(angle)#

图像设置旋转角度。

参数描述:

  • angle - 角度,int类型,精度为0.1度。
img.set_zoom(factor)#

图像设置缩放大小。

参数描述:

  • factor - 缩放程度,int类型,256为原图大小,512双倍尺寸。
img.set_pivot(x,y)#

设置图像的旋转中心,图像将围绕此点旋转。

参数描述:

  • x - 旋转中心x轴坐标,int类型。
  • y - 旋转中心y轴坐标,int类型。
img.set_antialias(antialias)#

是否启用/禁用变换的抗锯齿(旋转、缩放)。抗锯齿效果更好,但速度较慢。

参数描述:

  • antialias - 抗锯齿,bool类型,True为使能,False为禁止。

按钮(Button)#

概述-Button#

与基础对象相比,按钮没有新功能。 它们可用于语义目的,并且默认设置略有不同。

默认情况下,按钮在以下方面与基础对象不同:

  • 不可滚动
  • 添加到默认组
  • 默认高度和宽度设置为 LV_SIZE_CONTENT

部分和风格(Parts and Styles)-Button#

  • lv.PART.MAIN表示按钮的背景部分。

用法(Usage)-Button#

与基础对象相比,按钮没有新功能

事件(Events)-Button#

当对象被点击时有选中切换(Toggle)状态的效果,并且可以在 lv.EVENT.VALUE_CHANGED 事件类型中处理事件。

请注意,lv.KEY.ENTER 的状态被转换为 lv.EVENT.PRESSED/PRESSING/RELEASED 等。

参见基础对象的事件。

API-Button#

注意:本章节只介绍了一些常见API,如需查看所有API,可以访问LVGL官网查看。

构造函数-Button#
lv.btn(parent)#

创建一个按钮。

参数描述:

  • parent - 父对象,object类型,必填。

LVGL其他组件#

除了上述介绍的组件,LVGL还提供以下组件,项目中选择使用哪种组件请视需求而定。

组件构造函数说明LVGL官网链接
列表lv.list()一个垂直布局的矩形,可以向其中添加按钮和文本点击此处查看组件详细信息
窗口lv.win()由一个带有标题、按钮和内容区域的标题构建而成的容器点击此处查看组件详细信息
lv.acr()圆弧由背景和前景弧组成。前景(指示器)可以进行触摸调整点击此处查看组件详细信息
进度条lv.bar()显示进度点击此处查看组件详细信息
开关lv.sw()看起来像一个小滑块,开关的功能类似于按钮,也可以用来打开和关闭某些东西点击此处查看组件详细信息
滑动页lv.tileview()菜单页可用,比较界面切换的动画,多出了手指跟随的效果点击此处查看组件详细信息
仪表盘lv.meter()以非常灵活的方式可视化数据。在中可以显示圆弧、指针、刻度线和标签点击此处查看组件详细信息
图表lv.chart()折线图,直方图,散点图点击此处查看组件详细信息
键盘lv.keyboard()特殊的按钮矩阵,自身实现了按键映射点击此处查看组件详细信息
菜单lv.menu()多级菜单,它自动处理页面之间的遍历点击此处查看组件详细信息
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值