LVGL Python API#
LVGL (Light and Versatile Graphics Library) Python bindings for K230 平台
自动生成自 LVGL C 头文件,通过 libclang → IR → pybind11 流水线构建。 绑定方法/函数 902 个 (
.def()),枚举值 651 个,模块常量 65 个,枚举类 96 个,控件 26 个,类 8 个。
快速开始#

示例 |
说明 |
源码 |
|---|---|---|
仪表盘 Demo |
头像/图表/动画弧形/列表 |
|
Hello |
最小 LVGL 示例 (按钮) |
|
摄像头 + OSD |
摄像头画面叠加 LVGL 界面 |
|
摄像头 + 旋转 |
竖屏适配 |
|
中文字体 |
FreeType 加载 TTF 字体 |
|
基础控件 |
按钮/滑块/进度条/弧形/开关/LED |
初始化与驱动#
lv.init(v4l2_drm=None, v4l2_drm_run_flag=0)#
K230 平台一键初始化,内部完成:
lv_init()— 初始化 LVGL 库注册驱动后端
初始化显示后端 (DRM 或 DRM_V4L2_K230)
初始化 EVDEV 输入后端
参数 |
类型 |
说明 |
|---|---|---|
|
|
传入 V4l2Drm 对象使用 K230 v4l2-drm 后端 (OSD 与摄像头视频共享 DRM); |
|
|
保留参数,当前未使用,默认 0 |
lv.run()#
进入 LVGL 驱动运行循环 (阻塞)。支持 Ctrl+C 中断,中断后调用 os._exit(0) 退出。
模块级函数#
核心#
函数 |
说明 |
|---|---|
|
初始化 LVGL 库 |
|
反初始化 LVGL 库 |
|
LVGL 是否已初始化 |
|
调用 LVGL 定时器处理 (主循环核心),返回空闲时间 (ms) |
|
获取当前活动屏幕对象 |
|
加载指定屏幕 |
|
运行 LVGL 性能基准测试 |
|
返回百分比宽度/高度值 (用于 |
版本信息#
函数 |
说明 |
|---|---|
|
LVGL 主版本号 |
|
LVGL 次版本号 |
|
LVGL 补丁版本号 |
|
LVGL 版本信息字符串 |
显示#
函数 |
说明 |
|---|---|
|
创建显示对象 |
|
获取默认显示对象 |
|
创建 EVDEV 输入设备 |
定时器#
函数 |
说明 |
|---|---|
|
创建定时器,返回 timer_t 对象 |
动画#
常量 |
说明 |
|---|---|
|
动画无限循环值 |
分组#
函数 |
说明 |
|---|---|
|
创建输入分组 |
|
删除分组 |
|
设置默认分组 |
|
获取默认分组 |
|
将对象加入分组 |
|
将对象从分组移除 |
|
聚焦指定对象 |
|
聚焦下一个对象 |
|
聚焦上一个对象 |
|
设置是否循环聚焦 |
主题#
函数 |
说明 |
|---|---|
|
初始化默认主题 |
|
获取主题主色 |
调色板#
函数 |
说明 |
|---|---|
|
获取调色板主色 |
|
获取调色板亮色 |
|
获取调色板暗色 |
输入设备#
函数 |
说明 |
|---|---|
|
创建输入设备 |
|
获取下一个输入设备 |
|
获取输入设备类型 |
|
设置输入设备的分组 |
|
设置输入设备类型 |
驱动后端#
函数 |
说明 |
|---|---|
|
K230 驱动初始化 (由 |
|
注册驱动后端 |
|
初始化驱动后端 |
|
查询后端是否支持 |
|
打印支持的后端 |
|
运行驱动循环 |
FreeType 字体#
函数 |
说明 |
|---|---|
|
创建 FreeType 字体 |
|
删除 FreeType 字体 |
颜色 (color)#
创建颜色#
c1 = lv.color_make(255, 0, 0) # RGB (0-255)
c2 = lv.color.from_rgb(255, 0, 0) # RGB (0-255),color 静态方法
c3 = lv.color_hex(0xFF0000) # 十六进制整数
c4 = lv.color.from_hex(0xFF0000) # 十六进制整数,color 静态方法
c5 = lv.color(r, g, b) # _wrapper 别名,等同于 color_make
c6 = lv.color_from_hex_str("#FF0000") # 十六进制字符串,_wrapper 别名
c7 = lv.color_black() # 纯黑
c8 = lv.color_white() # 纯白
color 属性#
c = lv.color_make(255, 128, 0)
print(c.red, c.green, c.blue) # 读取 RGB 分量 (只读, 0-255)
透明度常量#
常量 |
值 |
说明 |
|---|---|---|
|
0 |
完全透明 |
|
0 |
0% 不透明 |
|
25 |
10% 不透明 |
|
51 |
20% |
|
76 |
30% |
|
102 |
40% |
|
127 |
50% |
|
153 |
60% |
|
178 |
70% |
|
204 |
80% |
|
229 |
90% |
|
255 |
100% 不透明 |
|
255 |
完全不透明 |
类 (Classes)#
类 |
Python 名称 |
说明 |
|---|---|---|
|
|
所有控件的基类 |
|
|
事件对象 |
|
|
颜色对象 |
|
|
显示对象 |
|
|
输入设备对象 |
|
|
定时器对象 |
|
|
动画对象 |
|
|
字体对象 (FreeType) |
基础对象 obj#
obj 是所有控件的基类。所有控件都继承 obj 的方法。
创建 (obj)#
obj = lv.obj() # 无参构造
child = parent.obj() # 创建子对象 (在 parent 下创建新的 obj)
注意:
lv.obj()无参构造创建基础对象,parent.obj()在父对象下创建子对象。
位置与尺寸#
方法 |
说明 |
|---|---|
|
设置位置 |
|
设置 X 坐标 |
|
设置 Y 坐标 |
|
设置宽高 |
|
设置宽度 |
|
设置高度 |
|
设置内容宽度 |
|
设置内容高度 |
|
获取坐标 |
|
获取宽高 |
|
获取内容宽高 |
对齐#
方法 |
说明 |
|---|---|
|
设置对齐方式 |
|
相对父对象对齐 |
|
相对另一对象对齐 |
|
居中 |
对齐值使用 lv.ALIGN 枚举:
lv.ALIGN.CENTER # 居中
lv.ALIGN.TOP_LEFT # 左上
lv.ALIGN.TOP_MID # 上中
lv.ALIGN.TOP_RIGHT # 右上
lv.ALIGN.BOTTOM_LEFT # 左下
lv.ALIGN.BOTTOM_MID # 下中
lv.ALIGN.BOTTOM_RIGHT # 右下
lv.ALIGN.LEFT_MID # 左中
lv.ALIGN.RIGHT_MID # 右中
lv.ALIGN.OUT_TOP_LEFT # 父对象外侧上方左对齐
lv.ALIGN.OUT_BOTTOM_MID # 父对象外侧下方居中
# ... 更多 OUT_ 变体
层级与父子关系#
方法 |
说明 |
|---|---|
|
设置父对象 |
|
获取父对象 |
|
获取子对象 |
|
获取子对象数量 |
|
获取在兄弟中的索引 |
|
移动到指定索引位置 |
|
移到最前 |
|
移到最后 |
|
交换两个对象位置 |
删除#
方法 |
说明 |
|---|---|
|
删除对象 |
|
异步删除对象 |
|
删除所有子对象 |
事件绑定 (简写)#
btn.add_event_cb(lv.EVENT.CLICKED, callback) # 添加事件回调
btn.on(lv.EVENT.CLICKED, callback) # 简写,等同于 add_event_cb
btn.off(lv.EVENT.CLICKED, callback) # 移除事件回调 (LED 专用)
btn.remove_event(idx) # 按索引移除事件
btn.remove_event_cb_with_user_data(cb, data) # 按回调移除事件
淡入淡出#
obj.fade_in(time_ms, delay_ms) # 淡入
obj.fade_out(time_ms, delay_ms) # 淡出
变换#
obj.set_transform(matrix) # 设置变换矩阵
obj.reset_transform() # 重置变换
obj.transform_point(point) # 变换坐标点
坐标与可见性#
方法 |
说明 |
|---|---|
|
获取绝对坐标区域 |
|
获取内容区域坐标 |
|
标记区域为无效 (重绘) |
|
标记指定区域为无效 |
|
对象是否可见 |
|
区域是否在对象内可见 |
|
移动到绝对位置 |
|
移动所有子对象 |
控件 (Widgets)#
所有控件通过模块级工厂函数创建,传入 parent 参数 (可选,默认为当前屏幕):
btn = lv.button(parent) # 创建按钮
统一命名: 所有控件共享
obj基类,但每个控件的方法都使用统一短名称(如set_text、set_value、close),无需加控件前缀。同名方法在不同控件上自动调用对应实现(如arc.set_value()和slider.set_value()各自更新对应控件的值)。每个控件章节的”常用方法”表已列出该控件支持的完整方法。
label#
文本显示控件,支持多行、滚动、重新着色等模式。
创建
label = lv.label(scr)
label.set_text("Hello World")
常用方法
方法 |
说明 |
|---|---|
|
设置文本 |
|
设置静态文本 (不复制) |
|
设置长文本模式 |
|
启用重新着色 |
|
最大行数 |
|
获取文本 |
|
在位置插入文本 |
|
从位置剪切文本 |
枚举
长文本模式 (lv.LABEL_LONG):
枚举值 |
说明 |
|---|---|
|
自动换行 (默认) |
|
超出部分显示省略号 |
|
滚动显示 |
|
循环滚动 |
|
裁剪 |
事件
事件 |
说明 |
|---|---|
|
文本改变 |
完整示例
image#
图片显示控件,支持缩放、旋转、偏移等变换。
创建
img = lv.image(scr)
img.set_src("A:/path/to/image.png") # LVGL 文件系统需要 'A:' 前缀
文件路径: LVGL 使用 FS_STDIO 后端,驱动器盘符为
A:,所有文件路径必须以A:开头 (如"A:/root/image.png")。支持 PNG (推荐)、BMP、JPEG (仅 baseline) 格式。
常用方法
方法 |
说明 |
|---|---|
|
设置图片源 |
|
X 偏移 |
|
Y 偏移 |
|
旋转 (0.1度单位, 450=45.0°) |
|
设置旋转中心 |
|
缩放 (256=1x, 512=2x) |
|
X 方向缩放 |
|
Y 方向缩放 |
|
混合模式 |
|
抗锯齿 |
|
内部对齐 |
|
获取缩放值 |
|
获取旋转角度 |
|
获取源图宽度 |
|
获取源图高度 |
|
获取旋转中心 |
枚举
图片对齐 (lv.IMAGE_ALIGN):DEFAULT, TOP_LEFT, TOP_MID, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_MID, BOTTOM_RIGHT, LEFT_MID, RIGHT_MID, CENTER, STRETCH, TILE, CONTAIN, COVER
事件
事件 |
说明 |
|---|---|
|
图片改变 |
完整示例
arc#
弧形控件,用于显示角度范围或作为旋钮调节值。
创建
arc = lv.arc(scr)
arc.set_range(0, 100)
arc.set_value(70)
常用方法
方法 |
说明 |
|---|---|
|
设置值范围 |
|
设置当前值 |
|
设置最小值 |
|
设置最大值 |
|
设置前景弧角度 |
|
设置背景弧角度 |
|
旋转偏移 |
|
模式 |
|
值变化速率 |
|
旋钮偏移 |
|
获取当前值 |
|
获取最小值 |
|
获取最大值 |
|
获取旋转偏移 |
|
获取前景起始角 |
|
获取前景结束角 |
|
获取模式 |
枚举
弧形模式 (lv.ARC_MODE):NORMAL, SYMMETRICAL, REVERSE
事件
事件 |
说明 |
|---|---|
|
值改变 |
完整示例
bar#
进度条控件,用于显示比例或进度。
创建
bar = lv.bar(scr)
bar.set_range(0, 100)
bar.set_value(60, True)
常用方法
方法 |
说明 |
|---|---|
|
设置范围 |
|
设置值 (是否动画) |
|
设置起始值 (范围模式) |
|
设置最小值 |
|
设置最大值 |
|
模式 |
|
方向 |
|
获取当前值 |
|
获取起始值 |
|
获取最小值 |
|
获取最大值 |
|
获取模式 |
|
获取方向 |
|
是否对称模式 |
枚举
条形模式 (lv.BAR_MODE):NORMAL, SYMMETRICAL, RANGE
方向 (lv.BAR_ORIENTATION):AUTO, HORIZONTAL, VERTICAL
事件
事件 |
说明 |
|---|---|
|
值改变 |
完整示例
slider#
滑块控件,用于拖拽调节值。
创建
slider = lv.slider(scr)
slider.set_range(0, 100)
slider.set_value(50, True)
常用方法
方法 |
说明 |
|---|---|
|
设置范围 |
|
设置值 (是否动画) |
|
设置起始值 (范围模式,是否动画) |
|
设置最小值 |
|
设置最大值 |
|
模式 |
|
方向 |
|
获取当前值 |
|
获取左值 (范围模式) |
|
获取最小值 |
|
获取最大值 |
|
获取模式 |
|
获取方向 |
|
是否对称模式 |
|
是否正在拖拽 |
枚举
滑块模式 (lv.SLIDER_MODE):NORMAL, SYMMETRICAL, RANGE
事件
事件 |
说明 |
|---|---|
|
值改变 |
完整示例
switch#
开关控件,用于切换开/关状态。
创建
sw = lv.switch(scr)
常用方法
方法 |
说明 |
|---|---|
|
方向 |
|
获取方向 |
枚举
方向 (lv.SWITCH_ORIENTATION):AUTO, HORIZONTAL, VERTICAL
事件
事件 |
说明 |
|---|---|
|
值改变 |
完整示例
checkbox#
复选框控件,用于选择/取消选择选项。
创建
cb = lv.checkbox(scr)
cb.set_text("Option A")
常用方法
方法 |
说明 |
|---|---|
|
设置文本 |
|
设置静态文本 |
|
获取文本 |
事件
事件 |
说明 |
|---|---|
|
值改变 |
完整示例
dropdown#
下拉列表控件,用于从选项中选择一项。
创建
dd = lv.dropdown(scr)
dd.set_options("Red\nGreen\nBlue")
常用方法
方法 |
说明 |
|---|---|
|
设置选项 (\n 分隔) |
|
在位置添加选项 |
|
设置选中项 |
|
设置当前选中项文本 |
|
设置静态文本 |
|
设置展开方向 |
|
设置指示符号 |
|
清除所有选项 |
|
获取选中索引 |
|
获取当前选中项文本 |
|
获取选项字符串 |
|
获取选项数量 |
|
按名称查找索引 |
|
打开下拉列表 |
|
关闭下拉列表 |
|
是否打开 |
事件
事件 |
说明 |
|---|---|
|
选中项改变 |
完整示例
roller#
滚轮控件,通过滚动选择选项。
创建
roller = lv.roller(scr)
roller.set_options("A\nB\nC", lv.ROLLER_MODE.NORMAL)
常用方法
方法 |
说明 |
|---|---|
|
设置选项 |
|
设置选中项 (是否动画) |
|
按字符串选中 |
|
设置可见行数 |
|
获取选中索引 |
|
获取选项 |
|
获取选项数量 |
枚举
滚轮模式 (lv.ROLLER_MODE):NORMAL, INFINITE
事件
事件 |
说明 |
|---|---|
|
选中项改变 |
完整示例
textarea#
文本输入框控件,支持单行/多行、密码模式、字符过滤等。
创建
ta = lv.textarea(scr)
ta.set_text("Hello")
常用方法
方法 |
说明 |
|---|---|
|
设置文本 |
|
设置占位文本 |
|
单行模式 |
|
密码模式 |
|
最大长度 |
|
限制可输入字符 |
|
设置光标位置 |
|
启用文本选择 |
|
追加文本 |
|
追加字符 (ASCII) |
|
删除光标前字符 |
|
删除光标后字符 |
|
清除选择 |
|
获取光标位置 |
|
是否单行 |
|
是否密码模式 |
|
获取最大长度 |
事件
事件 |
说明 |
|---|---|
|
文本内容改变 |
|
输入完成 |
完整示例
keyboard#
虚拟键盘控件,用于配合 Textarea 输入文本。
创建
kb = lv.keyboard(scr)
kb.set_textarea(textarea_obj)
常用方法
方法 |
说明 |
|---|---|
|
关联文本输入框 |
|
设置键盘模式 |
|
启用按键弹出 |
|
获取关联的文本框 |
|
获取当前模式 |
|
获取按键文本 |
枚举
键盘模式 (lv.KEYBOARD_MODE):TEXT_LOWER, TEXT_UPPER, SPECIAL, NUMBER, USER_1~USER_4
事件
事件 |
说明 |
|---|---|
|
按键值改变 |
|
输入完成 (确认键) |
完整示例
chart#
图表控件,支持折线、曲线、柱状等数据可视化。
创建
chart = lv.chart(scr)
chart.set_type(lv.CHART_TYPE.LINE)
常用方法
方法 |
说明 |
|---|---|
|
图表类型 |
|
设置轴范围 |
|
更新模式 |
|
水平/垂直分割线数 |
|
水平分割线数 |
|
垂直分割线数 |
|
设置轴最小值 |
|
设置轴最大值 |
|
设置数据点数 |
|
添加数据系列 |
|
追加一个数据点 |
|
全部设为同一值 |
|
设置系列颜色 |
|
刷新显示 |
|
获取类型 |
|
获取点数 |
|
获取更新模式 |
|
获取水平分割线数 |
|
获取垂直分割线数 |
|
获取按下的数据点 |
枚举
图表类型 (lv.CHART_TYPE):NONE, LINE, CURVE, BAR, STACKED, SCATTER
更新模式 (lv.CHART_UPDATE_MODE):SHIFT, CIRCULAR
轴 (lv.CHART_AXIS):PRIMARY_Y, SECONDARY_Y, PRIMARY_X, SECONDARY_X, LAST
事件
事件 |
说明 |
|---|---|
|
数据点改变 |
|
按下数据点 |
完整示例
table#
表格控件,用于显示行列数据。
创建
table = lv.table(scr)
table.set_row_count(5)
table.set_column_count(3)
常用方法
方法 |
说明 |
|---|---|
|
设置行数 |
|
设置列数 |
|
设置列宽 |
|
设置单元格文本 |
|
设置单元格控制标志 |
|
获取单元格文本 |
|
获取行数 |
|
获取列数 |
|
设置选中单元格 |
枚举
单元格控制 (lv.TABLE_CELL_CTRL):NONE, MERGE_RIGHT, TEXT_CROP, CUSTOM_1~CUSTOM_4
事件
事件 |
说明 |
|---|---|
|
选中单元格改变 |
完整示例
tabview#
标签页控件,用于多页面切换。
创建
tv = lv.tabview(scr)
tab1 = tv.add_tab("Tab 1")
tab2 = tv.add_tab("Tab 2")
常用方法
方法 |
说明 |
|---|---|
|
添加标签页 |
|
切换标签页 (是否动画) |
|
设置标签栏大小 |
|
设置标签栏位置 |
|
获取标签页数量 |
|
获取当前活动标签 |
|
获取内容区域 |
|
获取标签栏 |
事件
事件 |
说明 |
|---|---|
|
标签页切换 |
完整示例
list#
列表控件,用于显示带图标的条目列表。
创建
list = lv.list(scr)
list.add_text("Section Title")
btn = list.add_button(icon, "Item Text")
常用方法
方法 |
说明 |
|---|---|
|
添加文本标题 |
|
添加按钮条目 |
|
获取按钮文本 |
|
设置按钮文本 |
事件
事件 |
说明 |
|---|---|
|
点击条目 |
|
选中条目 |
完整示例
msgbox#
消息框控件,用于显示提示信息。无参构造时为模态 (带遮罩)。
创建
msgbox = lv.msgbox() # 模态 (推荐)
msgbox = lv.msgbox(parent) # 非模态 (指定父对象)
常用方法
方法 |
说明 |
|---|---|
|
添加标题 |
|
添加文本内容 |
|
添加底部按钮 |
|
添加关闭按钮 (✕) |
|
获取头部区域 |
|
获取底部区域 |
|
获取内容区域 |
|
关闭消息框 |
|
异步关闭消息框 |
事件
事件 |
说明 |
|---|---|
|
点击按钮 |
|
关闭消息框 |
|
按钮值改变 |
完整示例
注意事项
lv.msgbox() 不传 parent 时,内部传 NULL 给 lv_msgbox_create,LVGL 会自动在 lv_layer_top() 上创建半透明遮罩 (backdrop),实现模态效果。如果传入 parent 对象,则不会创建遮罩。
led#
LED 指示灯控件,用于显示状态。
创建
led = lv.led(scr)
led.set_size(30, 30)
常用方法
方法 |
说明 |
|---|---|
|
设置 LED 颜色 |
|
设置亮度 (0-255) |
|
开启 (最大亮度) |
|
关闭 (最小亮度) |
|
切换 |
|
获取亮度 |
|
获取颜色 |
完整示例
line#
折线控件,用于绘制多段折线。
创建
line = lv.line(scr)
line.center()
line.set_points([(0, 0), (40, 30), (80, 0), (120, 30), (160, 0), (200, 30)])
常用方法
方法 |
说明 |
|---|---|
|
设置坐标点 (列表 of 元组) |
|
Y 轴反转 |
|
获取 Y 反转状态 |
|
获取坐标点数量 |
完整示例
注意事项
set_points() 接受 Python 列表 of (x, y) 元组。Line 控件必须调用 set_points() 设置坐标点才能显示,否则为空白。
canvas#
画布控件,用于逐像素绘制图形。
创建
import numpy as np
canvas = lv.canvas(scr)
buf = np.zeros((H, W, 4), dtype=np.uint8)
canvas.set_buffer(buf.ctypes.data, W, H, lv.COLOR_FORMAT.ARGB8888)
常用方法
方法 |
说明 |
|---|---|
|
设置绘制缓冲区 |
|
设置像素 |
|
获取像素 |
|
填充背景 |
|
设置调色板 |
|
获取绘制缓冲区 |
完整示例
注意事项
set_buffer(buf, w, h, cf) 的 buf 参数为内存地址整数(uintptr_t),使用 numpy 数组时传 buf.ctypes.data,不要传 ctypes 指针对象。
scale#
刻度尺控件,用于显示刻度标记。
创建
scale = lv.scale(scr)
scale.set_range(0, 100)
常用方法
方法 |
说明 |
|---|---|
|
模式 |
|
总刻度数 |
|
主刻度间隔 |
|
设置范围 |
|
设置最小值 |
|
设置最大值 |
|
圆形刻度角度范围 |
|
旋转偏移 |
|
显示标签 |
|
刻度绘制在顶部 |
|
获取模式 |
|
获取总刻度数 |
|
获取最小值 |
|
获取最大值 |
|
获取角度范围 |
|
获取旋转偏移 |
枚举
刻度模式 (lv.SCALE_MODE):HORIZONTAL_TOP, HORIZONTAL_BOTTOM, VERTICAL_LEFT, VERTICAL_RIGHT, ROUND_INNER, ROUND_OUTER, LAST
事件
事件 |
说明 |
|---|---|
|
值改变 |
完整示例
spinbox#
数字输入框控件,用于精确数值调节。
创建
sb = lv.spinbox(scr)
sb.set_value(50)
常用方法
方法 |
说明 |
|---|---|
|
设置值 |
|
位数, 小数点位置 |
|
步进值 |
|
设置范围 |
|
设置最小值 |
|
设置最大值 |
|
循环 |
|
光标位置 |
|
数字步进方向 |
|
获取值 |
|
获取最小值 |
|
获取最大值 |
|
增加一步 |
|
减少一步 |
|
光标移到下一位 |
|
光标移到上一位 |
事件
事件 |
说明 |
|---|---|
|
值改变 |
完整示例
spinner#
加载动画控件,用于显示等待状态。
创建
sp = lv.spinner(scr)
sp.set_size(50, 50)
常用方法
方法 |
说明 |
|---|---|
|
周期(ms), 扫过角度 |
|
设置动画周期 |
|
设置弧扫角度 |
|
获取动画周期 |
|
获取弧扫角度 |
完整示例
tileview#
平铺视图控件,用于左右/上下滑动切换页面。
创建
tv = lv.tileview(scr)
tile1 = tv.add_tile(0, 0, lv.DIR.RIGHT)
tile2 = tv.add_tile(1, 0, lv.DIR.LEFT)
常用方法
方法 |
说明 |
|---|---|
|
添加 tile (列, 行, 可滑动方向) |
|
滑动到指定 tile (是否动画) |
|
按索引滑动 |
|
获取当前活动 tile |
完整示例
win#
窗口控件,带标题栏和内容区域。
创建
win = lv.win(scr)
title = win.add_title("Window")
常用方法
方法 |
说明 |
|---|---|
|
添加标题 |
|
添加按钮 |
|
获取头部 |
|
获取内容区域 |
完整示例
animimg#
动画图片控件,用于播放帧动画。
创建
anim = lv.animimg(scr)
anim.set_src(["A:/path/to/frame1.png", "A:/path/to/frame2.png"])
常用方法
方法 |
说明 |
|---|---|
|
设置图片路径列表 |
|
一个完整循环时间 (ms) |
|
重复次数 (255 = 无限循环) |
|
开始播放 |
|
获取循环时间 |
|
获取重复次数 |
完整示例
动画 (anim_t)#
动画对象,用于驱动控件属性随时间变化。
创建 (anim_t)#
a = lv.anim_t()
a.set_var(obj) # 设置动画目标对象
a.set_exec_cb(obj, lambda var, v: var.set_value(v)) # 设置执行回调 fn(var, value)
a.set_values(0, 100) # 起始值, 结束值
a.set_duration(1000) # 持续时间 (ms)
a.set_repeat_count(lv.ANIM_REPEAT_INFINITE) # 无限循环
a.start() # 启动动画
常用方法 (anim_t) |#
| set_exec_cb(obj, callback) | 设置执行回调 fn(var, value) |
| set_values(start, end) | 设置起始/结束值 |
| set_duration(ms) | 正向持续时间 |
| set_reverse_duration(ms) | 反向持续时间 |
| set_delay(ms) | 延迟启动 |
| set_repeat_count(n) | 重复次数 (ANIM_REPEAT_INFINITE = 无限) |
| set_repeat_delay(ms) | 重复间隔 |
| set_early_apply(True) | 立即应用起始值 |
| set_completed_cb(obj, callback) | 设置完成回调 |
| set_start_cb(obj, callback) | 设置开始回调 |
| start() | 启动动画 |
| delete() | 删除动画 |
运动路径#
方法 |
说明 |
|---|---|
|
线性 |
|
缓入 |
|
缓出 |
|
缓入缓出 |
|
过冲 |
|
弹跳 |
|
阶梯 |
常量#
常量 |
说明 |
|---|---|
|
无限循环标志 |
定时器 (timer_t)#
定时器对象,用于周期性执行回调。
创建 (timer_t)#
def on_timer(timer):
# 周期性执行的代码
pass
timer = lv.timer_create(on_timer, 100) # 每 100ms 调用一次
常用方法 (timer_t) |#
| ready() | 标记定时器为就绪 |
| pause() | 暂停定时器 |
| resume() | 恢复定时器 |
| is_valid() | 定时器是否有效 |
| delete() | 删除定时器 |
显示 (display)#
显示对象,用于管理屏幕分辨率和旋转。
创建 (display)#
disp = lv.display_create(800, 480) # 创建 800x480 显示
disp = lv.display_get_default() # 获取默认显示对象
常用方法 (display) |#
| set_rotation(rotation) | 设置旋转 |
| get_horizontal_resolution() | 获取水平分辨率 |
| get_vertical_resolution() | 获取垂直分辨率 |
| flush_ready() | 通知刷新完成 |
枚举 (display)#
显示旋转 (lv.DISPLAY_ROTATION):_0, _90, _180, _270
输入设备 (indev)#
输入设备对象,用于管理触摸屏、键盘等输入。
创建 (indev)#
indev = lv.indev_create()
indev.set_type(lv.INDEV_TYPE.POINTER)
常用方法 (indev)#
方法 |
说明 |
|---|---|
|
获取下一个设备 |
|
获取设备类型 |
|
设置设备类型 |
|
设置输入分组 |
分组 (group)#
分组用于键盘/编码器导航,将多个控件组织在一起,通过方向键在控件间切换焦点。
使用方式#
# 创建分组
g = lv.group_create()
lv.group_set_default(g)
# 将输入设备绑定到分组
indev = lv.indev_create()
indev.set_type(lv.INDEV_TYPE.KEYPAD)
lv.indev_set_group(indev, g)
# 将控件加入分组
lv.group_add_obj(g, btn1)
lv.group_add_obj(g, btn2)
分组函数#
函数 |
说明 |
|---|---|
|
创建分组 |
|
删除分组 |
|
设置默认分组 |
|
获取默认分组 |
|
将对象加入分组 |
|
将对象从分组移除 |
|
聚焦指定对象 |
|
聚焦下一个对象 |
|
聚焦上一个对象 |
|
设置是否循环聚焦 |
事件与回调#
注册事件回调#
def on_clicked(event):
if event.code == lv.EVENT.CLICKED:
print("Button clicked!")
print("Target:", event.target) # 触发事件的对象
btn.add_event_cb(lv.EVENT.CLICKED, on_clicked)
btn.on(lv.EVENT.CLICKED, on_clicked) # 简写,等同于 add_event_cb
event 对象#
回调函数接收 event 对象,提供以下属性和方法:
属性/方法 |
说明 |
|---|---|
|
事件码 (int,可与 |
|
触发事件的对象 (Obj) |
|
当前处理事件的对象 (事件冒泡路径上的对象) |
|
停止事件冒泡 |
|
停止当前对象的事件处理 |
|
停止向子对象传递事件 |
向后兼容:
Event对象支持== int比较(event == lv.EVENT.CLICKED等效于event.code == lv.EVENT.CLICKED),旧代码无需修改即可运行。
完整事件码 (lv.EVENT, 76 个)#
事件 |
说明 |
|---|---|
|
所有事件 |
|
按下 |
|
持续按压 |
|
按压丢失 |
|
短点击 |
|
单击 |
|
双击 |
|
三击 |
|
长按 |
|
长按重复 |
|
点击 |
|
释放 |
|
滚动开始 |
|
惯性滚动开始 |
|
滚动结束 |
|
滚动 |
|
手势 |
|
按键 |
|
旋钮 |
|
获得焦点 |
|
失去焦点 |
|
离开 |
|
命中测试 |
|
输入设备重置 |
|
悬停经过 |
|
悬停静止 |
|
悬停离开 |
|
值改变 |
|
插入 |
|
刷新 |
|
就绪 |
|
取消 |
|
屏幕加载完成 |
|
屏幕开始加载 |
|
屏幕卸载完成 |
|
屏幕开始卸载 |
|
尺寸改变 |
|
绘制任务添加 |
|
子对象改变 |
|
子对象创建 |
|
子对象删除 |
|
选中 |
|
勾选 |
样式系统#
样式通过 set_style_*(value, selector) 方法设置。selector 参数指定样式应用的目标,推荐使用 lv.SELECTOR.DEFAULT (默认状态 LV_PART_MAIN | LV_STATE_DEFAULT),避免使用裸数字 0。
常用 selector 值#
值 |
说明 |
|---|---|
|
|
|
主部分 |
|
指示器部分 (Slider/Bar 的填充) |
|
旋钮部分 |
|
项目部分 |
|
光标部分 |
|
选中部分 |
|
滚动条部分 |
|
自定义部分起始 |
|
任意部分 |
提示: 组合 Part + State 使用位或运算:
lv.PART.KNOB | lv.STATE.FOCUSED
背景样式#
obj.set_style_bg_color(lv.color_make(255, 0, 0), lv.SELECTOR.DEFAULT) # 背景颜色
obj.set_style_bg_opa(lv.OPA_50, lv.SELECTOR.DEFAULT) # 背景透明度
obj.set_style_bg_grad_color(lv.color_make(0, 0, 255), lv.SELECTOR.DEFAULT) # 渐变终止颜色
obj.set_style_bg_grad_dir(lv.GRAD_DIR.VER, lv.SELECTOR.DEFAULT) # 渐变方向
obj.set_style_bg_main_stop(0, lv.SELECTOR.DEFAULT) # 渐变起始位置 (0-255)
obj.set_style_bg_grad_stop(255, lv.SELECTOR.DEFAULT) # 渐变结束位置
obj.set_style_bg_main_opa(lv.OPA_100, lv.SELECTOR.DEFAULT) # 渐变起始透明度
obj.set_style_bg_grad_opa(lv.OPA_100, lv.SELECTOR.DEFAULT) # 渐变终止透明度
obj.set_style_bg_image_src(src, lv.SELECTOR.DEFAULT) # 背景图片
obj.set_style_bg_image_opa(lv.OPA_100, lv.SELECTOR.DEFAULT) # 背景图片透明度
obj.set_style_bg_image_recolor(color, lv.SELECTOR.DEFAULT) # 背景图片重新着色
obj.set_style_bg_image_tiled(True, lv.SELECTOR.DEFAULT) # 背景图片平铺
边框样式#
obj.set_style_border_width(2, lv.SELECTOR.DEFAULT) # 边框宽度
obj.set_style_border_color(lv.color_make(0, 0, 0), lv.SELECTOR.DEFAULT) # 边框颜色
obj.set_style_border_opa(lv.OPA_100, lv.SELECTOR.DEFAULT) # 边框透明度
obj.set_style_border_side(lv.BORDER_SIDE.FULL, lv.SELECTOR.DEFAULT) # 边框边
obj.set_style_border_post(True, lv.SELECTOR.DEFAULT) # 边框后绘制
圆角与阴影#
obj.set_style_radius(10, lv.SELECTOR.DEFAULT) # 圆角半径
obj.set_style_shadow_width(10, lv.SELECTOR.DEFAULT) # 阴影宽度
obj.set_style_shadow_color(lv.color_make(0, 0, 0), lv.SELECTOR.DEFAULT) # 阴影颜色
obj.set_style_shadow_offset_x(3, lv.SELECTOR.DEFAULT) # 阴影 X 偏移
obj.set_style_shadow_offset_y(3, lv.SELECTOR.DEFAULT) # 阴影 Y 偏移
obj.set_style_shadow_spread(2, lv.SELECTOR.DEFAULT) # 阴影扩散
obj.set_style_shadow_opa(lv.OPA_50, lv.SELECTOR.DEFAULT) # 阴影透明度
模糊样式#
obj.set_style_blur_radius(r, lv.SELECTOR.DEFAULT) # 模糊半径
obj.set_style_blur_quality(lv.BLUR_QUALITY.AUTO, lv.SELECTOR.DEFAULT) # 模糊质量
obj.set_style_blur_backdrop(True, lv.SELECTOR.DEFAULT) # 模糊背景
轮廓样式#
obj.set_style_outline_width(2, lv.SELECTOR.DEFAULT) # 轮廓宽度
obj.set_style_outline_color(lv.color_make(0, 128, 255), lv.SELECTOR.DEFAULT) # 轮廓颜色
obj.set_style_outline_opa(lv.OPA_100, lv.SELECTOR.DEFAULT) # 轮廓透明度
obj.set_style_outline_pad(3, lv.SELECTOR.DEFAULT) # 轮廓内边距
文本样式#
obj.set_style_text_color(lv.color_make(255, 255, 255), lv.SELECTOR.DEFAULT) # 文本颜色
obj.set_style_text_opa(lv.OPA_100, lv.SELECTOR.DEFAULT) # 文本透明度
obj.set_style_text_font(font_ptr, lv.SELECTOR.DEFAULT) # 文本字体
obj.set_style_text_letter_space(2, lv.SELECTOR.DEFAULT) # 字间距
obj.set_style_text_line_space(4, lv.SELECTOR.DEFAULT) # 行间距
obj.set_style_text_align(lv.TEXT_ALIGN.CENTER, lv.SELECTOR.DEFAULT) # 文本对齐
obj.set_style_text_decor(lv.TEXT_DECOR.UNDERLINE, lv.SELECTOR.DEFAULT) # 文本装饰
obj.set_style_text_outline_stroke_width(1, lv.SELECTOR.DEFAULT) # 文本描边宽度
obj.set_style_text_outline_stroke_color(lv.color_make(0, 0, 0), lv.SELECTOR.DEFAULT) # 描边颜色
内边距与外边距#
obj.set_style_pad_top(10, lv.SELECTOR.DEFAULT)
obj.set_style_pad_bottom(10, lv.SELECTOR.DEFAULT)
obj.set_style_pad_left(10, lv.SELECTOR.DEFAULT)
obj.set_style_pad_right(10, lv.SELECTOR.DEFAULT)
obj.set_style_pad_row(5, lv.SELECTOR.DEFAULT) # 行间距 (Flex/Grid)
obj.set_style_pad_column(5, lv.SELECTOR.DEFAULT) # 列间距
# 简写 (padding)
obj.set_style_pad_all(10, lv.SELECTOR.DEFAULT) # 四边相同
obj.set_style_pad_hor(10, lv.SELECTOR.DEFAULT) # 左右相同
obj.set_style_pad_ver(10, lv.SELECTOR.DEFAULT) # 上下相同
obj.set_style_pad_gap(5, lv.SELECTOR.DEFAULT) # 行列间距相同
obj.set_style_margin_top(5, lv.SELECTOR.DEFAULT)
obj.set_style_margin_bottom(5, lv.SELECTOR.DEFAULT)
obj.set_style_margin_left(5, lv.SELECTOR.DEFAULT)
obj.set_style_margin_right(5, lv.SELECTOR.DEFAULT)
# 简写 (margin)
obj.set_style_margin_all(5, lv.SELECTOR.DEFAULT)
obj.set_style_margin_hor(5, lv.SELECTOR.DEFAULT)
obj.set_style_margin_ver(5, lv.SELECTOR.DEFAULT)
变换样式#
obj.set_style_transform_scale_x(256, lv.SELECTOR.DEFAULT) # X 缩放 (256=1x)
obj.set_style_transform_scale_y(256, lv.SELECTOR.DEFAULT) # Y 缩放
obj.set_style_transform_scale(256, lv.SELECTOR.DEFAULT) # XY 同时缩放
obj.set_style_transform_rotation(0, lv.SELECTOR.DEFAULT) # 旋转 (0.1° 单位)
obj.set_style_transform_pivot_x(0, lv.SELECTOR.DEFAULT) # 旋转中心 X
obj.set_style_transform_pivot_y(0, lv.SELECTOR.DEFAULT) # 旋转中心 Y
obj.set_style_transform_skew_x(0, lv.SELECTOR.DEFAULT) # X 倾斜
obj.set_style_transform_skew_y(0, lv.SELECTOR.DEFAULT) # Y 倾斜
obj.set_style_translate_x(10, lv.SELECTOR.DEFAULT) # X 平移
obj.set_style_translate_y(10, lv.SELECTOR.DEFAULT) # Y 平移
其他样式#
obj.set_style_opa(lv.OPA_80, lv.SELECTOR.DEFAULT) # 整体透明度
obj.set_style_opa_layered(lv.OPA_80, lv.SELECTOR.DEFAULT) # 层叠透明度
obj.set_style_clip_corner(True, lv.SELECTOR.DEFAULT) # 裁剪圆角
obj.set_style_blend_mode(lv.BLEND_MODE.NORMAL, lv.SELECTOR.DEFAULT) # 混合模式
obj.set_style_anim_duration(300, lv.SELECTOR.DEFAULT) # 动画持续时间
obj.set_style_base_dir(lv.BASE_DIR.LTR, lv.SELECTOR.DEFAULT) # 文本方向
obj.set_style_bitmap_mask_src(src, lv.SELECTOR.DEFAULT) # 位图遮罩
obj.set_style_color_filter_opa(lv.OPA_100, lv.SELECTOR.DEFAULT) # 颜色过滤透明度
obj.set_style_layout(lv.LAYOUT.FLEX, lv.SELECTOR.DEFAULT) # 布局类型
obj.set_style_radial_offset(0, lv.SELECTOR.DEFAULT) # 径向偏移
obj.set_style_recolor(color, lv.SELECTOR.DEFAULT) # 重新着色
obj.set_style_rotary_sensitivity(256, lv.SELECTOR.DEFAULT) # 旋钮灵敏度
线与弧样式#
obj.set_style_line_width(2, lv.SELECTOR.DEFAULT) # 线宽
obj.set_style_line_color(lv.color_make(0, 0, 255), lv.SELECTOR.DEFAULT) # 线颜色
obj.set_style_line_rounded(True, lv.SELECTOR.DEFAULT) # 线端圆角
obj.set_style_line_dash_width(10, lv.SELECTOR.DEFAULT) # 虚线宽度
obj.set_style_line_dash_gap(5, lv.SELECTOR.DEFAULT) # 虚线间隔
obj.set_style_arc_width(4, lv.SELECTOR.DEFAULT) # 弧宽
obj.set_style_arc_color(lv.color_make(255, 0, 0), lv.SELECTOR.DEFAULT) # 弧颜色
obj.set_style_arc_rounded(True, lv.SELECTOR.DEFAULT) # 弧端圆角
obj.set_style_arc_image_src(src, lv.SELECTOR.DEFAULT) # 弧图片
尺寸约束样式#
obj.set_style_min_width(50, lv.SELECTOR.DEFAULT)
obj.set_style_max_width(200, lv.SELECTOR.DEFAULT)
obj.set_style_min_height(30, lv.SELECTOR.DEFAULT)
obj.set_style_max_height(100, lv.SELECTOR.DEFAULT)
obj.set_style_width(100, lv.SELECTOR.DEFAULT) # 固定宽度
obj.set_style_height(50, lv.SELECTOR.DEFAULT) # 固定高度
obj.set_style_size(100, lv.SELECTOR.DEFAULT) # 固定尺寸 (宽=高)
布局 (Flex / Grid)#
Flex 布局#
# 父容器设置 Flex
container.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP) # 行 + 换行
container.set_flex_align(
lv.FLEX_ALIGN.CENTER, # 主轴对齐
lv.FLEX_ALIGN.CENTER, # 交叉轴对齐
lv.FLEX_ALIGN.CENTER # 行对齐
)
# 子项设置
child.set_flex_grow(1) # 弹性增长
Flex 流向 (lv.FLEX_FLOW):ROW, COLUMN, ROW_WRAP, ROW_REVERSE, ROW_WRAP_REVERSE, COLUMN_WRAP, COLUMN_REVERSE, COLUMN_WRAP_REVERSE
Flex 对齐 (lv.FLEX_ALIGN):START, END, CENTER, SPACE_EVENLY, SPACE_AROUND, SPACE_BETWEEN
Grid 布局#
container.set_grid_align(
lv.GRID_ALIGN.CENTER, # 列对齐
lv.GRID_ALIGN.CENTER # 行对齐
)
child.set_grid_cell(
lv.GRID_ALIGN.CENTER, # 列对齐
0, 1, # 列位置, 列跨度
lv.GRID_ALIGN.CENTER, # 行对齐
0, 1 # 行位置, 行跨度
)
Grid 对齐 (lv.GRID_ALIGN):START, CENTER, END, STRETCH, SPACE_EVENLY, SPACE_AROUND, SPACE_BETWEEN
布局类型 (lv.LAYOUT):NONE, FLEX, GRID, LAST
滚动#
obj.set_scrollbar_mode(lv.SCROLLBAR_MODE.AUTO)
obj.set_scroll_dir(lv.DIR.VER) # 限制滚动方向
obj.set_scroll_snap_x(lv.SCROLL_SNAP.CENTER)
obj.set_scroll_snap_y(lv.SCROLL_SNAP.CENTER)
obj.scroll_by(dx, dy, anim_en) # 滚动偏移
obj.scroll_to(x, y, anim_en) # 滚动到位置
obj.scroll_to_view(anim_en) # 滚动到可见
obj.is_scrolling() # 是否正在滚动
obj.stop_scroll_anim() # 停止滚动动画
obj.get_scroll_x() # 获取水平滚动位置
obj.get_scroll_y() # 获取垂直滚动位置
obj.get_scroll_bottom() # 获取底部滚动距离
obj.get_scroll_top() # 获取顶部滚动距离
obj.get_scroll_left() # 获取左侧滚动距离
obj.get_scroll_right() # 获取右侧滚动距离
Flags-and-states#
对象标志 (lv.OBJ_FLAG)#
obj.add_flag(lv.OBJ_FLAG.HIDDEN) # 隐藏
obj.remove_flag(lv.OBJ_FLAG.HIDDEN) # 取消隐藏
obj.has_flag(lv.OBJ_FLAG.CLICKABLE) # 检查标志
obj.has_flag_any(lv.OBJ_FLAG.CLICKABLE) # 检查是否包含任一标志
obj.set_flag(lv.OBJ_FLAG.CLICKABLE, True) # 设置标志开/关
位运算支持:
add_flag/remove_flag等方法已通过_wrapper.py补丁支持位或运算,如obj.add_flag(lv.OBJ_FLAG.CLICKABLE | lv.OBJ_FLAG.CHECKABLE)。
常用标志 |
说明 |
|---|---|
|
隐藏 |
|
可点击 |
|
点击可聚焦 |
|
可选中 |
|
可滚动 |
|
弹性滚动 |
|
惯性滚动 |
|
一次只滚动一个子项 |
|
水平滚动链 |
|
垂直滚动链 |
|
聚焦时滚动 |
|
方向键滚动 |
|
可对齐到滚动位置 |
|
按压锁定 |
|
事件冒泡 |
|
手势冒泡 |
|
高级命中测试 |
|
忽略布局 |
|
浮动 (不参与布局) |
|
发送绘制任务事件 |
|
溢出可见 |
|
事件渗透 |
|
布局自定义标志 |
|
用户自定义标志 |
对象状态 (lv.STATE)#
obj.add_state(lv.STATE.CHECKED) # 添加状态
obj.remove_state(lv.STATE.CHECKED) # 移除状态
obj.get_state() # 获取状态
obj.has_state(lv.STATE.CHECKED) # 检查状态
常用状态 |
说明 |
|---|---|
|
默认 |
|
替代 |
|
选中 |
|
聚焦 |
|
按键聚焦 |
|
编辑 |
|
悬停 |
|
按压 |
|
滚动 |
|
禁用 |
|
用户自定义状态 |
|
任意状态 |
屏幕管理#
scr = lv.screen_active() # 获取当前活动屏幕
lv.screen_load(scr) # 加载屏幕 (无动画)
# 创建新屏幕 (使用 obj 无参构造)
scr2 = lv.obj()
lv.screen_load(scr2)
屏幕加载动画 (lv.SCREEN_LOAD):NONE, OVER_LEFT, OVER_RIGHT, OVER_TOP, OVER_BOTTOM, MOVE_LEFT, MOVE_RIGHT, MOVE_TOP, MOVE_BOTTOM, FADE_IN, FADE_ON, FADE_OUT, OUT_LEFT, OUT_RIGHT, OUT_TOP, OUT_BOTTOM
枚举参考#
对齐 (lv.ALIGN)#
DEFAULT, TOP_LEFT, TOP_MID, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_MID, BOTTOM_RIGHT, LEFT_MID, RIGHT_MID, CENTER, 以及 OUT_* 外侧对齐变体 (OUT_TOP_LEFT, OUT_TOP_MID, OUT_TOP_RIGHT, OUT_BOTTOM_LEFT, OUT_BOTTOM_MID, OUT_BOTTOM_RIGHT, OUT_LEFT_TOP, OUT_LEFT_MID, OUT_LEFT_BOTTOM, OUT_RIGHT_TOP, OUT_RIGHT_MID, OUT_RIGHT_BOTTOM)。共 22 个。
方向 (lv.DIR)#
NONE, LEFT, RIGHT, TOP, BOTTOM, HOR, VER, ALL
文本对齐 (lv.TEXT_ALIGN)#
AUTO, LEFT, CENTER, RIGHT
文本装饰 (lv.TEXT_DECOR)#
NONE, UNDERLINE, STRIKETHROUGH
颜色格式 (lv.COLOR_FORMAT)#
UNKNOWN, RAW, RAW_ALPHA, L8, I1, I2, I4, I8, A8, RGB565, ARGB8565, RGB565A8, AL88, RGB565_SWAPPED, RGB888, ARGB8888, XRGB8888, ARGB8888_PREMULTIPLIED, A1, A2, A4, ARGB1555, ARGB4444, ARGB2222, YUV_START, I420, NV12, NV21, YUY2, UYVY 等。共 45 个。
调色板 (lv.PALETTE)#
RED, PINK, PURPLE, DEEP_PURPLE, INDIGO, BLUE, LIGHT_BLUE, CYAN, TEAL, GREEN, LIGHT_GREEN, LIME, YELLOW, AMBER, ORANGE, DEEP_ORANGE, BROWN, BLUE_GREY, GREY, LAST, NONE
混合模式 (lv.BLEND_MODE)#
NORMAL, ADDITIVE, SUBTRACTIVE, MULTIPLY, DIFFERENCE
滚动条模式 (lv.SCROLLBAR_MODE)#
OFF, ON, ACTIVE, AUTO
边框边 (lv.BORDER_SIDE)#
NONE, BOTTOM, TOP, LEFT, RIGHT, FULL, INTERNAL
按键 (lv.KEY)#
UP, DOWN, RIGHT, LEFT, ESC, DEL, BACKSPACE, ENTER, NEXT, PREV, HOME, END
渐变方向 (lv.GRAD_DIR)#
NONE, VER, HOR, LINEAR, RADIAL, CONICAL
渐变扩展 (lv.GRAD_EXTEND)#
PAD, REPEAT, REFLECT
模糊质量 (lv.BLUR_QUALITY)#
AUTO, SPEED, PRECISION
文本方向 (lv.BASE_DIR)#
LTR, RTL, AUTO, NEUTRAL, WEAK
输入设备类型 (lv.INDEV_TYPE)#
NONE, POINTER, KEYPAD, BUTTON, ENCODER
输入设备模式 (lv.INDEV_MODE)#
NONE, TIMER, EVENT
显示渲染模式 (lv.DISPLAY_RENDER)#
PARTIAL, DIRECT, FULL
控件部分 (lv.PART)#
MAIN, SCROLLBAR, INDICATOR, KNOB, SELECTED, ITEMS, CURSOR, CUSTOM_FIRST, ANY
覆盖结果 (lv.COVER)#
COVER, NOT_COVER, MASKED
符号常量#
常量 |
说明 |
常量 |
说明 |
|---|---|---|---|
|
项目符号 |
|
音频 |
|
视频 |
|
列表 |
|
确认 |
|
关闭 |
|
电源 |
|
设置 |
|
主页 |
|
下载 |
|
驱动器 |
|
刷新 |
|
静音 |
|
音量中 |
|
音量最大 |
|
图片 |
|
色调 |
|
上一曲 |
|
播放 |
|
暂停 |
|
停止 |
|
下一曲 |
|
弹出 |
|
左 |
|
右 |
|
加 |
|
减 |
|
睁眼 |
|
闭眼 |
|
警告 |
|
随机 |
|
上 |
|
下 |
|
循环 |
|
目录 |
|
上传 |
|
呼叫 |
|
剪切 |
|
复制 |
|
保存 |
|
柱状图 |
|
信封 |
|
充电 |
|
粘贴 |
|
铃铛 |
|
键盘 |
|
GPS |
|
文件 |
|
WiFi |
|
满电 |
|
电量3 |
|
电量2 |
|
电量1 |
|
空电 |
|
USB |
|
蓝牙 |
|
回收站 |
|
编辑 |
|
退格 |
|
SD 卡 |
完整示例#
示例 |
说明 |
源码 |
|---|---|---|
基础控件 |
按钮/复选框/滑块/进度条/弧形/开关/LED |
|
图片加载 |
PNG/BMP 加载、旋转、缩放 |
|
样式定制 |
颜色/圆角/阴影/渐变/模糊 |
|
Flex 布局 |
行/列/换行/对齐 |
|
FreeType 中文 |
加载 TTF 字体显示中文 |
|
动画图片 |
animimg 帧动画 |
|
仪表盘 |
anim_t 驱动弧形动画 / timer 定时刷新 |
FreeType 字体支持#
LVGL 内置的 Montserrat 字体仅包含拉丁字符。要显示中文、日文、韩文等 CJK 字符,需通过 FreeType 加载 TTF/OTF 字体。
加载字体#
# 创建 FreeType 字体 (返回 lv.font 对象)
font = lv.freetype_font_create(
"/usr/lib/fonts/SourceHanSansSC-Normal-Min.ttf", # 字体文件路径
lv.FREETYPE_RENDER.BITMAP, # 渲染模式
24, # 字号 (px)
lv.FREETYPE_STYLE.NORMAL, # 样式
)
使用字体#
label = lv.label(scr)
label.set_style_text_font(font, lv.SELECTOR.DEFAULT) # 设置字体 (SELECTOR.DEFAULT = 默认状态)
label.set_text("你好,世界!")
释放字体#
字体对象在 Python GC 回收时自动释放,也可手动释放:
lv.freetype_font_delete(font)
渲染模式 (lv.FREETYPE_RENDER)#
模式 |
说明 |
|---|---|
|
位图渲染 (推荐,性能好) |
|
矢量轮廓渲染 (支持任意缩放,性能较低) |
字体样式 (lv.FREETYPE_STYLE)#
样式 |
说明 |
|---|---|
|
正常 |
|
斜体 |
|
粗体 |
font 类#
font = lv.freetype_font_create(...)
font.is_valid() # 检查字体是否有效
完整示例
完整源码: quick_chinese.py | demo_chinese.py
注意事项#
字体文件: K230 设备预装
SourceHanSansSC-Normal-Min.ttf(思源黑体精简版)于/usr/lib/fonts/。精简版仅包含常用汉字,部分特殊符号(如°、℃)可能缺失,可用中文替代(如”度”)。性能: FreeType 字体首次渲染某个字符时需要光栅化,后续使用缓存。
BITMAP模式比OUTLINE模式性能更好。字号: 每个字号需创建独立的字体对象。如需 16px 和 24px,需调用两次
freetype_font_create。生命周期: 字体对象由 Python GC 管理。确保字体对象在 label 使用期间不被回收。
已知限制#
以下功能因 C API 参数/返回类型限制,未在 Python 绑定中暴露:
类别 |
未绑定功能 |
原因 |
|---|---|---|
样式对象 |
|
涉及 |
事件发送 |
|
涉及 |
内存/字符串 |
|
手动跳过规则 |
日志 |
|
手动跳过规则 |
按钮/控件矩阵 |
|
涉及复杂 C 数组/回调参数 |
注意: 动画 (
anim_t)、定时器 (timer_t)、分组 (group_*)、输入设备 (indev_*)、显示 (display_*) 已在本次更新中绑定暴露。
统计:
统计项 |
数量 |
|---|---|
|
902 |
└ 模块级独立函数 |
78 |
└ Obj 类方法 |
786+ |
去重后唯一方法名 |
881 |
枚举类 |
96 |
枚举成员值 |
651 |
模块常量 |
651+ |
类 |
8 |
控件工厂函数 |
26 |
文档生成时间: 2026-07-28
基于
lvgl_pybind_generated.cpp自动分析 +_wrapper.py手动补充生成
