exeasyUI
作者:江访
一、概述
exEasyUI 是整合 LuatOS 中 lcd 核心库和 tp 触摸库而打造的简化 UI 组件库,内置了组件管理、页面渲染与触摸事件分发功能。
主要特性
- 组件丰富:内置 Button、Label、ProgressBar、MessageBox、Picture、CheckBox、Window 等核心组件
- 开发高效:用更少代码快速搭建可量产的触控界面,内置触摸/渲染/组件与示例
- 验证便捷:提供 LuatOS PC 模拟器快速验证效果,无需等待烧录
- 效果一致:PC 模拟器呈现的功能效果与设备上运行的效果一致
- 持续更新:更多组件持续更新中,当前版本为:V1.6.2,点击下载 exEasyUI 演示 demo 可进行模拟体验
注意事项
- exeasyui 为扩展库,没有内置到 LuatOS 内核固件中,真实设备需要把 exeasyui、screen_data_table、extp、exlcd 文件同其他脚本文件一同烧录到设备中才能确保 exeasyui 扩展库正常运行;
- 
正因为 exeasyui 没有内置到 LuatOS 内核固件中,使用时需要 require("exeasyui")加载后才能正常调用 exeasyui 的功能; 
- 
如果以 require("exeasyui")形式引入 exeasyui 扩展库,那么调用代码时需要把下方示例中的 ui.xxx 改成 exeasyui.xxx; 
- 如果同示例代码一样以 ui = require("exeasyui")形式引入 exeasyui 扩展库,,那么就能按照参考示例 demo 一样,把接口的使用写成 ui.xxx;
- exeasyui 默认使用的是 12 号中文字体,Air780EPM 不支持 12 号中文字体,使用会没有中文显示。
二、核心示例
1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;
2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
3、更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/exeayui
2.1 核心代码
以下示例演示:创建一个窗口,开启纵向滚动,将各个组件的最小可用示例纵向排布,滑动浏览。
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
sys.taskInit(function()
    sys.wait(500)
    -- 依赖 screen_data_table.lua 内的 lcdargs/touch 参数
    ui.hw.init({})
    ui.init({ theme = "light" })
    local win = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 内容高度较大,启用纵向滚动
    win:enableScroll({ direction = "vertical", contentHeight = 1000, threshold = 8 })
    local y = 20
    local function place(h)
        local cur = y; y = y + h + 16; return cur
    end
    -- 1) Button
    local btn = ui.Button({ x = 20, y = place(44), w = 280, h = 44, text = "Button", onClick = function(self)
        log.info("demo", "button clicked")
    end })
    win:add(btn)
    -- 2) Toggle按钮(v1.6.0:Button支持toggle功能)
    local tb = ui.Button({ x = 20, y = place(64), w = 64, h = 64, 
        src = "/luadb/icon.jpg", toggle = true, 
        onToggle = function(t) log.info("demo", "toggled", t) end 
    })
    win:add(tb)
    -- 3) CheckBox
    local cb = ui.CheckBox({ x = 20, y = place(24), text = "Check me", checked = false, onChange = function(v)
        log.info("demo", "checkbox", v)
    end })
    win:add(cb)
    -- 4) Label(v1.6.0:支持自动换行)
    local lbl = ui.Label({ x = 20, y = place(60), w = 280, wordWrap = true,
        text = "This is a long text that will wrap automatically within the specified width." })
    win:add(lbl)
    -- 5) Picture(示例:无实际图片时会显示占位框)
    local pic = ui.Picture({ x = 20, y = place(120), w = 160, h = 120, autoplay = false, src = "/luadb/sample.jpg" })
    win:add(pic)
    -- 6) MessageBox(作为静态面板展示)
    local box = ui.MessageBox({ x = 20, y = place(120), w = 280, h = 120, title = "MessageBox", message = "Info Panel", buttons = {"OK"}, onResult = function(r)
        log.info("demo", "msgbox", r)
    end })
    win:add(box)
    -- 7) ProgressBar
    local pb = ui.ProgressBar({ x = 20, y = place(26), w = 280, h = 26, progress = 35, text = "35%" })
    win:add(pb)
    ui.add(win)
    while true do
        ui.clear()
        ui.render()
        sys.wait(30)
    end
end)
sys.run()
2.2 演示环境搭建
2.2.1 演示代码和 PC 模拟器下载链接
当前版本为:V1.6.2,点击下载 exEasyUI 演示 demo 可进行模拟体验
2.2.2 演示文件说明
- cmd 启动 LuatOS PC 模拟器的快捷键;
- luatos-lua.exe,LuatOS PC 模拟器;
- lib 文件夹,exEasyUI 库文件,无需修改;
- 各 demo 文件夹,演示的 demo 文件,其中 main.lua 为主程序;
2.2.3 演示步骤
- 双击 cmd 快捷键运行 LuatOS PC 模拟器;
- 把代码下方 PC 模拟器快捷命令复制到 LuatOS PC 模拟器里面
- 按回车运行 LuatOS PC 模拟器和 demo 代码
- 退出 pc 模拟器运行的代码,使用快捷键 ctrl+c
- 查看 pc 模拟器历史运行的 PC 模拟器快捷命令,使用快捷键 ↑
2.3 组件效果及其 demo
2.3.1 Window(窗口容器)+Label(文本)静态方式
2.3.1.1 演示效果
| 默认使用12号中文字体认 | 文本内容动态变化 | 可设置颜色 | 使用gtfont字库可设置字体大小 | 
| 黑色/白色,跟随主题 | 时间:19:30:20 | 时间:19:30:20 | 时间:19:30:20 | 
2.3.1.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建Label(文本)组件,在(20,20)位置显示"hello exEasyUI",命名为lbl
    lbl = ui.Label({ x = 20, y = 20, text = "hello exEasyUI"})
    -- 将组件lbl并注册到page1
    page1:add(lbl)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 更新时间给文本组件lbl
        lbl:setText("时间:"..os.date("%Y-%m-%d %H:%M:%S"))           
        -- 刷新显示
        ui.render()
        -- 等待30ms
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.1.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.1Window+Label\
2.3.2 Window(窗口容器)+Label(文本)+ 循环刷新
2.3.2.1 演示效果
| 默认状态 | 按下反馈 | |
| 默认按钮 |  |  | 
| 自定义命名 |  |  | 
2.3.2.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个Button(按钮)文本模式,显示在(20.20)位置,命名为btn1
    local btn1 = ui.Button({ x = 20, y = 20})
    page1:add(btn1)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 刷新显示
        ui.render()
        -- 等待30ms
        sys.wait(30) 
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.3Window+Button\
2.3.4 Window(窗口容器)+ Button(按钮)图标模式
2.3.4.1 演示效果
| 设置默认图标 |  | 
| 设置点击后图标 |  | 
2.3.4.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个Button(按钮)图标模式,显示在(20.20)位置,命名为btn2,点击切换图片
    local btn2 = ui.Button({x = 20, y = 20, w = 64, h = 64,
        toggle = true,                  -- 启用切换模式
        src = "/luadb/4.jpg",           -- 默认图片
        src_toggled = "/luadb/5.jpg",   -- 切换状态时的图片
    })
    page1:add(btn2)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 刷新显示
        ui.render()
        -- 等待30ms
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.4.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.4Window+Button\
2.3.5 Window(窗口容器)+ ProgressBar(进度条)静态方式
2.3.5.1 演示效果
| 默认 |  | 
2.3.5.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个ProgressBar进度条,显示在(20.20)位置,命名为pb
    local pb = ui.ProgressBar({ x = 20, y = 20, w = 280, h = 26})
    -- 添加控件到page1
    page1:add(pb)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 刷新显示
        ui.render()
        -- 等待30ms
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.5.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.5Window+ProgressBar\
2.3.6 Window(窗口容器)+ ProgressBar(进度条)动态方式
2.3.6.1 演示效果
| 默认 |  | 
| 更改进度 |  | 
| 自定义内容 |  | 
2.3.6.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local direction = 1 
local current = 0
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个ProgressBar进度条,显示在(20.20)位置,命名为pb
    local pb = ui.ProgressBar({ x = 20, y = 20, w = 280, h = 26})
    -- 添加控件到page1
    page1:add(pb)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 刷新显示
        ui.render()
        pb:setProgress(current)
        current = current + direction
        if current >= 100 then
            direction = -1
        elseif current <= 0 then
            direction = 1
        end  
        -- 等待30ms
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.6.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.6Window+ProgressBar\
2.3.7 Window(窗口容器)+ MessageBox(消息面板)
2.3.7.1 演示效果
| 标题消息按钮 |  | 
| 富文本消息 |  | 
2.3.7.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个MessageBox(消息面板),启用自动换行,显示在(20.20)位置,命名为box
    local box = ui.MessageBox({ x = 20, y = 20, wordWrap = true,title = "通知", message = "愿你前路浩荡,未来可期.愿你保持热爱,奔赴山海。愿你所有的努力都不被辜负,最终活成自己最喜欢的模样.加油!"})
    page1:add(box)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 刷新显示
        ui.render()
        -- 等待30ms
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.7.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.7Window+MessageBox\
2.3.8 Window(窗口容器)+ CheckBox(复选框)
2.3.8.1 演示效果
| 默认状态 | 选中状态 | 选中后执行程序 | 
|  |  | 可选 | 
2.3.8.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个CheckBox(复选框),显示在(20.20)位置,命名为cb
    local cb = ui.CheckBox({ x = 20, y = 20, text = "Check me"})
    page1:add(cb)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 刷新显示
        ui.render()
        -- 等待30ms
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.8.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.8Window+CheckBox\
2.3.9 Window(窗口容器)+ Picture(图片轮播)单图模式
2.3.9.1 演示效果
| 未设置图片 | 设置了图片 | 
|  |  | 
2.3.9.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个 Picture(图片轮播)组件,显示在(20.20)位置,命名为pic
    local pic = ui.Picture({ x = 20, y = 20, sources = {"/luadb/1.jpg"}})
    -- 添加控件pic到page1
    page1:add(pic)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 刷新显示
        ui.render()
        -- 等待30ms
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.9.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.9Window+Picture\
2.3.10 Window(窗口容器)+ Picture(图片轮播)轮播模式
2.3.10.1 演示效果
| **列表内图片,每张按设置之间循环显示** |  |  |  | 
2.3.10.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建Window(窗口容器),设置背景为白色,命名为page1
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个 Picture(图片轮播)组件,按顺序每张图片显示1.5s,显示在(20.20)位置,命名为pic
    local pic = ui.Picture({ x = 20, y = 20, sources = {"/luadb/1.jpg", "/luadb/2.jpg", "/luadb/3.jpg"}, autoplay = true, interval = 1500})
    -- 添加控件pic到page1
    page1:add(pic)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        -- 清除显示
        ui.clear()
        -- 刷新显示
        ui.render()
        -- 等待30ms
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.10.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.10Window+Picture\
2.3.11 全部控件
2.3.11.1 演示效果
|  |  | 
2.11.2 演示代码
PROJECT = "exEasyUI_demo"
VERSION = "1.0.0"
sys = require("sys")
local ui = require("exeasyui")
local function exEasyUI_demo()
    sys.wait(500)
    -- 依赖 screen_data_table.lua 内的 lcdargs/touch 参数
    -- 显示触摸初始化
    ui.hw.init({})
    -- 设置主题
    ui.init({ theme = "light" })
    -- 创建设置背景为白色
    local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 1、创建一个高度为1000像素的页面,移动超过8个像素,页面跟随
    page1:enableScroll({ direction = "vertical", contentHeight = 1000, threshold = 8 })
    -- 2、 ProgressBar进度条
    local progress = 0
    local pb = ui.ProgressBar({ x = 20, y = 170, w = 280, h = 26, progress = progress})
    -- 添加控件到page1
    page1:add(pb)
    -- 3、 MessageBox(消息框/面板)
    local box = ui.MessageBox({ x = 20, y = 160, wordWrap = true, buttons = {"接受祝福"},title = "祝福", message = "愿你前路浩荡,未来可期.愿你保持热爱,奔赴山海。愿你所有的努力都不被辜负,最终活成自己最喜欢的模样.加油!"})
    page1:add(box)
    box:hide()
    -- 4、 Button
    local btn1 = ui.Button({ x = 180, y = 76, onClick = function(self)
        progress = progress + 10  pb:setProgress(progress) pb:setText("下载中"..progress.."%")
        if progress == 100 then box:show() progress = 0 end
    end })
    page1:add(btn1)
    -- 5、 ToolButton,点击切换图片,可选执行程序
    local btn2 = ui.Button({x = 10, y = 64, w = 64, h = 64,
        src = "/luadb/4.jpg",           -- 默认图片
        src_toggled = "/luadb/5.jpg",   -- 切换状态时的图片
        toggle = true,                  -- 启用切换模式
    })
    page1:add(btn2)
    -- 6、创建一个三张图片轮播的控件,1.5s切换一张
    local pic = ui.Picture({ x = 20, y = 310,
    sources = {"/luadb/1.jpg", "/luadb/2.jpg", "/luadb/3.jpg"}, autoplay = true, interval = 1500 })
    -- 添加控件pic到page1
    page1:add(pic)
    -- 7、 CheckBox
    local cb = ui.CheckBox({ x = 20, y = 240, text = "Check me", checked = false, onChange = function (v)
        log.info("demo", "checkbox", v)
    end })
    page1:add(cb)
    -- 8、 Label 目前显示的是日期和时间
    lbl = ui.Label({ x = 20, y = 20, text = ""})
    page1:add(lbl)
    -- 将page1注册到ui
    ui.add(page1)
    -- 显示主循环
    while true do
        ui.clear()
        -- 更新时间给文本组件
        lbl:setText("时间:"..os.date("%Y-%m-%d %H:%M:%S"))
        ui.render()
        sys.wait(30)
    end
end
sys.taskInit(exEasyUI_demo)
sys.run()
2.3.11.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.11Allcomponent\
2.3.12 Window(窗口容器)+ 水平滑动
2.3.12.1 演示效果
|  | 
2.3.12.2 演示代码
-- exEasyUI v1.6.0
local ui = require("exeasyui")
sys = require("sys")
sys.taskInit(function()
    sys.wait(500)
    ui.hw.init({})
    ui.init({ theme = "light" })
    local win = ui.Window({ backgroundColor = 0xFFFF })
    -- 启用横向滚动,将两页内容并排布置到一个宽画布
    local pageW, pageH = 320, 480
    local totalW = pageW * 2
    win:enableScroll({ direction = "horizontal", contentWidth = totalW, threshold = 8, pagingEnabled = true, pageWidth = pageW })
    local function makeGrid(offsetX, labelPrefix)
        local cols, rows = 3, 3
        local bw, bh = 90, 80
        local mx, my = 20 + offsetX, 60
        local gapx, gapy = 10, 10
        local n = 1
        for r = 0, rows - 1 do
            for c = 0, cols - 1 do
                local x = mx + c * (bw + gapx)
                local y = my + r * (bh + gapy)
                local btn = ui.Button({ x = x, y = y, w = bw, h = bh, text = string.format("%s-%d", labelPrefix, n) })
                win:add(btn)
                n = n + 1
            end
        end
    end
    -- 左页与右页
    makeGrid(0,  "P1")
    makeGrid(pageW, "P2")
    ui.add(win)
    while true do
        ui.clear()
        ui.render()
        sys.wait(30)
    end
end)
sys.run()
2.3.12.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.12Horizontal_slidin_page\
2.3.13 Window(窗口容器)+ 纵向滑动
2.3.13.1 演示效果
|  | 
2.3.13.2 演示代码
-- exEasyUI v1.6.0
local ui = require("exeasyui")
sys = require("sys")
sys.taskInit(function()
    sys.wait(500)
    -- 依赖 screen_data_table.lua 内的 lcdargs/touch 参数
    ui.hw.init({})
    ui.init({ theme = "light" })
    local win = ui.Window({ backgroundColor = 0xFFFF })
    -- 启用纵向分页滚动,将两页内容上下排布到一个高画布
    local pageW, pageH = 320, 480
    local totalH = pageH * 2
    win:enableScroll({ direction = "vertical", contentHeight = totalH, threshold = 8, pagingEnabled = true, pageHeight = pageH })
    local function makeButtons(offsetY, labelPrefix)
        -- 改为竖直等间距排列:1列3行,水平居中
        local cols, rows = 1, 3
        local bw, bh = 90, 80
        local mx = math.floor((pageW - bw) / 2) -- 居中
        local gap = math.floor((pageH - rows * bh) / (rows + 1))
        if gap < 8 then gap = 8 end
        local n = 1
        for r = 0, rows - 1 do
            local x = mx
            local y = offsetY + gap + r * (bh + gap)
            local btn = ui.Button({ x = x, y = y, w = bw, h = bh, text = string.format("%s-%d", labelPrefix, n) })
            win:add(btn)
            n = n + 1
        end
    end
    -- 上页与下页:每页 3 个按钮,共 6 个
    makeButtons(0,      "P1")
    makeButtons(pageH,  "P2")
    ui.add(win)
    while true do
        ui.clear()
        ui.render()
        sys.wait(30)
    end
end)
sys.run()
2.3.13.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.13Vertical_sliding_page\
2.3.14 页面切换
2.3.14.1 演示效果
|  |  |  | 
2.3.14.2 演示代码
-- 项目名称和版本定义
PROJECT = "exEasyUI_demo"  -- 项目名称,用于标识当前工程
VERSION = "1.0.0"          -- 项目版本号
-- 引入exEasyUI库
local ui = require("exeasyui")
-- 创建一个msgbox_page页面的函数
-- 这个函数用于创建消息框演示页面
local function msgbox_page()
    -- 创建一个白色背景的窗口容器
    local win = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建一个消息框作为页面标题(不包含按钮)
    -- 这里使用MessageBox组件来显示标题和描述文字
    local title = ui.MessageBox({ 
        x = 10, y = 10,          -- 位置坐标
        w = 300, h = 80,         -- 宽度和高度
        title = "消息框页面",     -- 标题文字
        message = "点击按钮弹出消息框",  -- 描述信息
        buttons = {}             -- 空按钮数组,表示不显示任何按钮
    })
    -- 创建"弹出消息框"按钮
    local btn = ui.Button({
        x = 20, y = 140,         -- 按钮位置
        w = 180, h = 50,         -- 按钮尺寸
        text = "弹出消息框",      -- 按钮文字
        -- 按钮点击事件处理函数
        onClick = function()
            -- 当按钮被点击时,创建一个新的消息框
            local box = ui.MessageBox({
                x = 40, y = 210,     -- 消息框显示位置
                w = 240, h = 120,    -- 消息框尺寸
                title = "提示",      -- 消息框标题
                message = "这是一条消息",  -- 消息内容
                buttons = { "确定", "取消" },  -- 两个按钮
                -- 按钮点击回调函数(这里为空函数)
                onResult = function()
                    -- 可以在这里处理按钮点击后的逻辑
                end
            })
            -- 将消息框添加到UI渲染队列中
            ui.add(box)
        end
    })
    -- 创建"返回"按钮
    local back = ui.Button({
        x = 220, y = 140,        -- 按钮位置(在弹出按钮右边)
        w = 80, h = 50,          -- 按钮尺寸
        text = "返回",           -- 按钮文字
        -- 按钮点击事件:返回上一级页面
        onClick = function()
            win:back()  -- 调用窗口的back方法返回主页
        end
    })
    -- 将所有组件添加到窗口中
    win:add(title)  -- 添加标题消息框
    win:add(btn)    -- 添加弹出按钮
    win:add(back)   -- 添加返回按钮
    return win      -- 返回创建好的窗口对象
end
-- 创建一个checkbox_page页面的函数
-- 这个函数用于创建复选框演示页面
local function checkbox_page()
    -- 创建白色背景窗口
    local win = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建页面标题(使用无按钮的消息框)
    local title = ui.MessageBox({ 
        x = 10, y = 10, 
        w = 300, h = 80, 
        title = "复选框页面", 
        message = "演示多个CheckBox", 
        buttons = {} 
    })
    -- 创建三个复选框组件
    local cb1 = ui.CheckBox({ x = 20, y = 120, text = "选项A" })  -- 默认未选中
    local cb2 = ui.CheckBox({ x = 20, y = 160, text = "选项B", checked = true })  -- 默认选中
    local cb3 = ui.CheckBox({ x = 20, y = 200, text = "选项C" })  -- 默认未选中
    -- 创建返回主页按钮
    local back = ui.Button({
        x = 20, y = 260, 
        w = 120, h = 40,
        text = "返回主页",
        onClick = function()
            win:back()  -- 返回主页
        end
    })
    -- 将所有组件添加到窗口
    win:add(title)  -- 标题
    win:add(cb1)    -- 复选框A
    win:add(cb2)    -- 复选框B  
    win:add(cb3)    -- 复选框C
    win:add(back)   -- 返回按钮
    return win      -- 返回窗口对象
end
-- 主程序入口函数
local function exEasyUI_demo()
    -- 等待500毫秒,确保系统初始化完成
    sys.wait(500)
    -- 初始化硬件(lcd显示屏和触摸屏)
    ui.hw.init({})
    -- 初始化UI系统,设置主题为浅色模式
    ui.init({ theme = "light" })
    -- 创建主页面窗口(白色背景)
    local home = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 配置子页面工厂函数
    -- 这里注册了两个子页面:"page1"对应消息框页面,"page2"对应复选框页面
    home:configureSubpages({ 
        page1 = msgbox_page,   -- 消息框演示页面
        page2 = checkbox_page  -- 复选框演示页面
    })
    -- 创建导航按钮1:进入复选框示例页面
    local btn1 = ui.Button({
        x = 20, y = 60,    -- 按钮位置
        w = 280, h = 50,   -- 按钮尺寸
        text = "复选框示例", -- 按钮文字
        onClick = function()
            -- 点击后显示复选框示例页面
            home:showSubpage("page2")
        end
    })
    -- 创建导航按钮2:进入消息框示例页面  
    local btn2 = ui.Button({
        x = 20, y = 130,   -- 按钮位置(在第一个按钮下方)
        w = 280, h = 50,   -- 按钮尺寸
        text = "消息框示例", -- 按钮文字
        onClick = function()
            -- 点击后显示消息框示例页面
            home:showSubpage("page1")
        end
    })
    -- 创建功能按钮:移除复选框子界面(演示销毁功能)
    local btnRemove = ui.Button({
        x = 20, y = 200,   -- 按钮位置
        w = 280, h = 50,   -- 按钮尺寸
        text = "移除复选框子界面(销毁)", -- 按钮文字
        onClick = function()
            -- 强制销毁缓存的checkbox子页面,释放内存
            home:closeSubpage("page2", { destroy = true })
        end
    })
    -- 将所有按钮添加到主页面
    home:add(btn1)         -- 复选框示例按钮
    home:add(btn2)         -- 消息框示例按钮
    home:add(btnRemove)    -- 移除页面按钮
    -- 将主页面添加到UI渲染系统
    ui.add(home)
    -- 主渲染循环:持续更新和显示UI
    while true do
        ui.clear()      -- 清空屏幕
        ui.render()     -- 渲染所有可见组件
        sys.wait(30)    -- 等待30毫秒(约33帧/秒)
    end
end
-- 创建并启动主任务
sys.taskInit(exEasyUI_demo)
-- 启动系统调度器
sys.run()
2.3.14.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.14Switch_page\
2.3.15 矢量字体
2.3.15.1 演示效果
|  | 
2.3.15.2 演示代码
PROJECT = "exEasyUI_gfont_demo"
VERSION = "1.0.0"
sys = require("sys")
-- exEasyUI v1.6.0
local ui = require("exeasyui")
sys.taskInit(function()
    sys.wait(500)
    -- 打开iic供电
    gpio.setup(141, 1, gpio.PULLUP)
    -- 启用 gtfont 字体后端
    ui.hw.init({ lcd_sn = "AirLCD_1001", tp = "gt911", font = { type = "gtfont", spi = { id = 1, cs = 12, clock = 20*1000*1000 }, gray = false, size = 32 } })
    ui.init({ theme = "light" })
    local win = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    ui.add(win)
    local text1 = ui.Label({ x = 10, y = 20, text = "ABCDEFG", color = ui.COLOR_BLACK })
    local text2 = ui.Label({ x = 10, y = 100, text = "abcdefg", color = ui.COLOR_RED })
    local text3 = ui.Label({ x = 10, y = 180, text = "1234567", color = ui.COLOR_GREEN })
    local text4 = ui.Label({ x = 10, y = 260, text = "!@#$%^&*", color = ui.COLOR_BLUE })
    local text5 = ui.Label({ x = 10, y = 340, text = "Hello GTFont", color = ui.COLOR_ORANGE })
    local text6 = ui.Label({ x = 10, y = 420, text = "中英混排 ABC 合宙", color = ui.COLOR_PINK })
    ui.add(text1)
    ui.add(text2)
    ui.add(text3)
    ui.add(text4)
    ui.add(text5)
    ui.add(text6)
    while true do
        ui.clear()
        ui.render()
        sys.wait(200)
    end
end)
sys.run()
2.3.15.3 PC 模拟器快捷命令
.\luatos-lua.exe .\lib\ .\demo\2.15gtfont\
三、常量详解
扩展库常量,顾名思义是由扩展库中定义的、不可重新赋值或修改的固定值,在脚本代码中需要 require("exeasyui")后,可通过 exeasyui.常量名直接调用;
exEasyUI 库定义了以下常量,用于颜色配置和触摸事件处理:
3.1 exeasyui.COLOR_WHITE
参数含义:白色  
数据类型:number  
取值范围:0xFFFF  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10, 
            w = 100, h = 40,
            text = "按钮",
            textColor = exeasyui.COLOR_WHITE
        })
3.2 exeasyui.COLOR_BLACK
参数含义:黑色  **
**数据类型:number  **
**取值范围:0x0000  **
**示例代码:
        local label = exeasyui.Label({
            x = 10, y = 10,
            text = "文本标签",
            color = exeasyui.COLOR_BLACK
        })
3.3 exeasyui.COLOR_GRAY
参数含义:灰色  
数据类型:number  
取值范围:0x8410  
示例代码:
        local progressBar = exeasyui.ProgressBar({
            x = 10, y = 10,
            w = 200, h = 20,
            backgroundColor = exeasyui.COLOR_GRAY
        })
3.4 exeasyui.COLOR_BLUE
参数含义:蓝色  
数据类型:number  
取值范围:0x001F  
示例代码:
        local progressBar = exeasyui.ProgressBar({
            x = 10, y = 10,
            w = 200, h = 20,
            progressColor = exeasyui.COLOR_BLUE
        })
3.5 exeasyui.COLOR_RED
参数含义:红色  
数据类型:number  
取值范围:0xF800  
示例代码:
        local label = exeasyui.Label({
            x = 10, y = 10,
            text = "错误信息",
            color = exeasyui.COLOR_RED
        })
3.6 exeasyui.COLOR_GREEN
参数含义:绿色  
数据类型:number  
取值范围:0x07E0  
示例代码:
        local label = exeasyui.Label({
            x = 10, y = 10,
            text = "成功信息",
            color = exeasyui.COLOR_GREEN
        })
3.7 exeasyui.COLOR_YELLOW
参数含义:黄色  
数据类型:number  
取值范围:0xFFE0  
示例代码:
        local label = exeasyui.Label({
            x = 10, y = 10,
            text = "警告信息",
            color = exeasyui.COLOR_YELLOW
        })
3.8 exeasyui.COLOR_CYAN
参数含义:青色  
数据类型:number  
取值范围:0x07FF  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10,
            w = 100, h = 40,
            text = "按钮",
            bgColor = exeasyui.COLOR_CYAN
        })
3.9 exeasyui.COLOR_MAGENTA
参数含义:洋红色  
数据类型:number  
取值范围:0xF81F  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10,
            w = 100, h = 40,
            text = "按钮",
            borderColor = exeasyui.COLOR_MAGENTA
        })
3.10 exeasyui.COLOR_ORANGE
参数含义:橙色  
数据类型:number  
取值范围:0xFC00  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10,
            w = 100, h = 40,
            text = "警告按钮",
            bgColor = exeasyui.COLOR_ORANGE
        })
3.11 exeasyui.COLOR_PINK
参数含义:粉色  
数据类型:number  
取值范围:0xF81F  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10,
            w = 100, h = 40,
            text = "特殊按钮",
            bgColor = exeasyui.COLOR_PINK
        })
3.12 exeasyui.COLOR_WIN11_LIGHT_DIALOG_BG
参数含义:Windows 11 浅色主题对话框背景色  
数据类型:number  
取值范围:0xF79E  
示例代码:
        local window = exeasyui.Window({
            x = 0, y = 0,
            w = 320, h = 240,
            backgroundColor = exeasyui.COLOR_WIN11_LIGHT_DIALOG_BG
        })
3.13 exeasyui.COLOR_WIN11_LIGHT_BUTTON_BG
参数含义:Windows 11 浅色主题按钮背景色  
数据类型:number  
取值范围:0xFFDF  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10,
            w = 100, h = 40,
            text = "按钮",
            bgColor = exeasyui.COLOR_WIN11_LIGHT_BUTTON_BG
        })
3.14 exeasyui.COLOR_WIN11_LIGHT_BUTTON_BORDER
参数含义:Windows 11 浅色主题按钮边框色  
数据类型:number  
取值范围:0xE73C  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10,
            w = 100, h = 40,
            text = "按钮",
            borderColor = exeasyui.COLOR_WIN11_LIGHT_BUTTON_BORDER
        })
3.15 exeasyui.COLOR_WIN11_DARK_DIALOG_BG
参数含义:Windows 11 深色主题对话框背景色  
数据类型:number  
取值范围:0x2104  
示例代码:
        local window = exeasyui.Window({
            x = 0, y = 0,
            w = 320, h = 240,
            backgroundColor = exeasyui.COLOR_WIN11_DARK_DIALOG_BG
        })
3.16 exeasyui.COLOR_WIN11_DARK_BUTTON_BG
参数含义:Windows 11 深色主题按钮背景色  
数据类型:number  
取值范围:0x3186  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10,
            w = 100, h = 40,
            text = "按钮",
            bgColor = exeasyui.COLOR_WIN11_DARK_BUTTON_BG
        })
3.17 exeasyui.COLOR_WIN11_DARK_BUTTON_BORDER
参数含义:Windows 11 深色主题按钮边框色  
数据类型:number  
取值范围:0x4A69  
示例代码:
        local btn = exeasyui.Button({
            x = 10, y = 10,
            w = 100, h = 40,
            text = "按钮",
            borderColor = exeasyui.COLOR_WIN11_DARK_BUTTON_BORDER
        })
四、函数详解
4.1 核心初始化与渲染接口
4.1.1 exeasyui.hw.init(opts)
功能
初始化硬件显示和触摸设备。
注意
- 需要把 exeasyui、screen_data_table、extp、exlcd 文件一同烧录到设备中,才能确保 exeasyui 扩展库正常运行,并且 screen_data_table 中的参数正确配置。
- 初始化硬件显示和触摸设备,exeasyui 默认开启缓冲区设置,禁用 JPG 图片硬件解码,使用 12 号中文字体。
- 启用缓冲区后,缓冲区会占用固定的内存空间(大小为:屏幕宽度 × 屏幕高度 × 2 字节),所有绘图操作结果所生成的数据将首先写入缓冲区,在执行刷新指令时,系统会一次性将缓冲区中的数据快速传输至屏幕。
- 若不设置缓冲区,模块需要一边处理图像数据一边等待数据发送,每次只要产生显示数据都需要寻找端口然后发送,相对于设置缓冲区实现同样的操作运行效率更低。
- JPG 硬件解码开启,图片刷新速度更快, JPG 图片的长宽都需要是 16 的倍数, 否则会出现画面拉伸的现象。
- 使用 gtfont 外置矢量字体,需要正确配置相关参数。
参数
opts
参数含义:硬件配置参数表
数据类型:table
是否必选:可选
取值范围:包含以下enableBuffer,enableHardwareDecode,font 三个可选子参数:
        {
            参数含义:启用帧缓冲区
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:默认启用
            参数示例:true
            enableBuffer =  ,
            参数含义:启用硬件JPG解码
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:默认禁用
            参数示例:false
            enableHardwareDecode =  ,
            参数含义:字体配置参数表
            数据类型:table
            取值范围:包含以下可选子参数:
                    {
                        参数含义:字体后端类型
                        数据类型:string
                        取值范围:"gtfont"(外部字体芯片), "default"(内置字体)
                        是否必选:可选
                        注意事项:不设置时默认使用"default",显示为12号中文字体;
                        参数示例:"gtfont"
                        type = ,
                        参数含义:字体大小
                        数据类型:number
                        取值范围:大于0的整数
                        是否必选:可选
                        注意事项:gtfont模式下有效,默认16
                        参数示例:16
                        size =  ,
                        参数含义:是否启用灰度渲染
                        数据类型:boolean
                        取值范围:true(启用), false(禁用)
                        是否必选:可选
                        注意事项:gtfont模式下有效,默认false
                        参数示例:true
                        gray =  ,
                        参数含义:SPI通信配置
                        数据类型:table
                        取值范围:包含以下子参数:
                                {
                                    参数含义:SPI端口号
                                    数据类型:number
                                    取值范围:0, 1, 2等有效SPI端口
                                    是否必选:是(当使用gtfont时)
                                    注意事项:如果使用软件SPI,则这里传入软件SPI对象
                                    参数示例:1
                                    id =  ,
                                    参数含义:SPI片选引脚
                                    数据类型:number
                                    取值范围:有效GPIO引脚号
                                    是否必选:是(当使用gtfont时)
                                    注意事项:必须正确连接GTFont芯片的CS引脚
                                    参数示例:12
                                    cs =  ,
                                }
                        是否必选:可选
                        注意事项:仅当type为"gtfont"时需要配置
                        spi =  ,
                    }                        
            是否必选:可选
            注意事项:如果使用gtfont,必须正确连接硬件并配置spi参数
            font =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:可选
注意事项:硬件初始化必须在其他UI操作之前调用
返回值
local hwinit_result = exeasyui.hw.init(opts)
hwinit_result
含义说明:硬件初始化结果
数据类型:boolean
取值范围:true(成功), false(失败)
注意事项:初始化失败时后续UI操作可能异常
返回示例:true
示例 1:使用默认参数初始化硬件
-- 初始化exeasyui 硬件,默认开启缓冲区设置,禁用jpg图片硬件解码,使用12号中文字体
exeasyui.hw.init({})
示例 2:使用 GTFont 外部字体芯片初始化硬件
-- 初始化硬件
local success = exeasyui.hw.init({
    enableBuffer = true,
    enableHardwareDecode = false,
    font = {
        type = "gtfont",
        size = 16,
        spi = {
            id = 1,
            cs = 12,
        }
    }
})
if success then
    log.info("硬件初始化成功")
else
    log.error("硬件初始化失败")
end
4.1.2 exeasyui.init(opts)
功能
初始化 exEasyUI 系统,配置主题和事件处理系统。
参数
opts
参数含义:系统配置参数表
数据类型:table
是否必选:可选
取值范围:包含以下可选子参数:
        {
            参数含义:设置UI主题模式
            数据类型:string
            取值范围:"light"(浅色模式), "dark"(深色模式)
            是否必选:可选
            注意事项:不设置时默认使用"dark"深色模式
            参数示例:"light"
            theme =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:可选
注意事项:所有参数均为可选,不传入opts时使用默认配置
返回值
无
示例
-- 初始化exEasyUI系统
exeasyui.init(
    {
        theme = "light", -- 使用浅色主题
    }
)
4.1.3 exeasyui.add(component)
功能
将UI组件添加到exeasyui的渲染队列,调用exeasyui.render()刷新组件时会已添加到exeasyui中的组件,还会根据父组件索引对应的子组件状态,然后渲染出来。
参数
component
参数含义:UI组件对象
数据类型:table
是否必选:是
取值范围:通过exeasyui.window、exeasyui.Button、exeasyui.Label等构造函数创建的对象
注意事项:
参数示例:button_component
返回值
无
示例 1 在 exeasyui 中添加 Window 组件
-- 创建Window(窗口容器),设置背景为黑色,命名为page1
    local page1 = exeasyui.Window({ backgroundColor = ui.COLOR_WHITE })
    exeasyui.add(page1)
示例 2 在 exeasyui 中添加 button 组件
local button = exeasyui.Button({x=10, y=10, w=100, h=36, text="测试按钮"})
exeasyui.add(button)
4.1.4 exeasyui.remove(component)
功能
从渲染队列中移除 UI 组件。
参数
component
参数含义:要移除的UI组件对象
数据类型:table
是否必选:是
取值范围:已通过exeasyui.add添加的组件对象
注意事项:移除后组件将不再被渲染和响应事件
参数示例:button_component
返回值
local remove_result = exeasyui.remove(component)
remove_result
含义说明:移除操作结果
数据类型:boolean
取值范围:true(成功移除), false(未找到组件)
注意事项:无
返回示例:true
示例
local button = exeasyui.Button({x=10, y=10, w=100, h=36, text="测试按钮"})
exeasyui.add(button)
-- 稍后移除按钮
local result = exeasyui.remove(button)
if result then
    log.info("按钮移除成功")
end
4.1.5 xeasyui.clear(color)
功能
清空屏幕并填充指定颜色。
参数
color
参数含义:清屏颜色
数据类型:number
是否必选:可选
取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值;
注意事项:不传入时默认使用黑色
参数示例:exeasyui.COLOR_WHITE
返回值
无
示例
-- 清屏为白色
exeasyui.clear(exeasyui.COLOR_WHITE)
-- 清屏为默认黑色
exeasyui.clear()
4.1.6 exeasyui.render()
功能
渲染所有已添加的可见组件到屏幕。
参数
无
返回值
无
示例
-- 添加组件
local button = exeasyui.Button({x=10, y=10, w=100, h=36, text="按钮"})
exeasyui.add(button)
-- 渲染到屏幕
exeasyui.render()
4.1.7 exeasyui.debug(v)
功能
配置调试模式开关。
参数
v
参数含义:调试配置
数据类型:boolean
是否必选:可选
取值范围:true或false
注意事项:暂无
参数示例:true
返回值
无
示例
-- 启用调试信息(默认)
exeasyui.debug(true)
-- 关闭所有调试
exeasyui.debug(false)
-- 查询当前调试状态
-- 注意:此接口主要用于控制TP消息等调试信息的输出
4.1.8 exeasyui.getTheme()
功能
获取当前 UI 主题模式。
参数
无
返回值
local current_theme = exeasyui.getTheme()
current_theme
含义说明:当前主题模式
数据类型:string
取值范围:"light", "dark"
注意事项:无
返回示例:"dark"
示例
local theme = exeasyui.getTheme()
log.info("当前主题", theme)
4.2 组件构造函数及构造后使用方法
4.2.1 exeasyui.Window(opts)
功能
创建窗口容器组件,支持子组件管理和页面导航。
参数
opts
参数含义:窗口配置参数表
数据类型:table
是否必选:是
取值范围:包含以下子参数:
        {
            参数含义:窗口左上角X坐标
            数据类型:number
            取值范围:0到屏幕宽度
            是否必选:可选
            注意事项:默认0(全屏)
            参数示例:0
            x =  ,
            参数含义:窗口左上角Y坐标
            数据类型:number
            取值范围:0到屏幕高度
            是否必选:可选
            注意事项:默认0(全屏)
            参数示例:0
            y =  ,
            参数含义:窗口宽度
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认屏幕宽度
            参数示例:320
            w =  ,
            参数含义:窗口高度
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认屏幕高度
            参数示例:240
            h =  ,
            参数含义:窗口背景图片路径
            数据类型:string
            取值范围:有效的JPG文件路径
            是否必选:可选
            注意事项:与backgroundColor背景色参数互斥
            参数示例:"/luadb/bg.jpg"
            backgroundImage =  ,
            参数含义:窗口背景颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_BLACK
            backgroundColor =  ,
            参数含义:窗口是否可见
            数据类型:boolean
            取值范围:true(可见), false(不可见)
            是否必选:可选
            注意事项:默认可见
            参数示例:true
            visible =  ,
            参数含义:窗口是否启用
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:禁用时不响应触摸事件
            参数示例:true
            enabled =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:是
注意事项:窗口通常作为其他组件的容器使用
返回值
local window_component = exeasyui.Window(opts)
window_component
含义说明:窗口组件对象
数据类型:table
取值范围:包含draw、handleEvent、add、remove等方法的组件对象
注意事项:需要调用exeasyui.add添加到渲染队列
返回示例:window_object
示例
ui = require("exeasyui")
-- 创建窗口
local win = exeasyui.Window({
    backgroundColor = exeasyui.COLOR_BLACK
})
-- 配置子页面
win:configureSubpages({
    page1 = function() return exeasyui.Window({backgroundColor = exeasyui.COLOR_RED}) end,
    page2 = function() return exeasyui.Window({backgroundColor = exeasyui.COLOR_BLUE}) end
})
-- 显示子页面
win:showSubpage("page1")
sys.wait(3000)
win:showSubpage("page2")
exeasyui.add(win)
4.2.1.1 Window:add(child)
功能
向 Window 组件添加一个子组件。
参数
child
参数含义:要添加的组件实例
数据类型:table
是否必选:是
取值范围:任何实现了draw和handleEvent方法的组件对象
注意事项:组件必须通过exeasyui.Button、exeasyui.Label等构造函数创建
参数示例:button_object
返回值
无
示例
ui = require("exeasyui")
-- 创建Window(窗口容器),设置背景为白色,命名为page1
local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
-- 创建一个Button(按钮)文本模式,显示在(20.20)位置,命名为btn1
local btn1 = ui.Button({ x = 20, y = 20})
-- 将btn1添加到page1内
page1:add(btn1)
4..2.1.2 Window:remove(child)
功能
从窗口中移除一个已添加的子组件。
参数
child
参数含义:要移除的组件实例
数据类型:table
是否必选:是
取值范围:已通过add方法添加到窗口的组件对象
注意事项:移除后组件将不再被渲染和响应事件
参数示例:button_object
返回值
local remove_result = Window:remove(child)
remove_result
含义说明:移除操作结果
数据类型:boolean
取值范围:true(成功移除), false(未找到组件)
注意事项:无
返回示例:true
示例
-- 创建Window(窗口容器),设置背景为白色,命名为page1
local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
-- 创建一个Button(按钮)文本模式,显示在(20.20)位置,命名为btn1
local btn1 = ui.Button({ x = 20, y = 20})
local remove_result = page1:remove(btn1)
if remove_result then
    [log.info](https://log.info/)("组件btn1移除成功")
end
4.2.1.3 Window:clear()
功能
清空窗口的所有子组件。
参数
无
返回值
无
示例
-- 创建Window(窗口容器),设置背景为白色,命名为page1
local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
-- 清除名为page1的Window(窗口容器)中的子组件
page1:clear()
4.2.1.4 Window:setBackgroundImage(path)
功能
设置窗口背景图片。
参数
path
参数含义:背景图片文件路径
数据类型:string
是否必选:是
取值范围:有效的JPG文件路径
注意事项:设置背景图片会覆盖背景颜色
参数示例:"/luadb/wallpaper.jpg"
返回值
无
示例
ui = require("exeasyui")
-- 创建Window(窗口容器),设置背景为白色,命名为page1
local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
page1:setBackgroundImage("/luadb/background.jpg")
4.2.1.5 Window:setBackgroundColor(color)
功能
设置窗口背景颜色,并清除已设置的背景图片。
参数
color
参数含义:背景颜色值
数据类型:number
是否必选:是
取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值,
注意事项:设置背景颜色会清除背景图片
参数示例:exeasyui.COLOR_WHITE
返回值
无
示例
ui = require("exeasyui")
-- 创建Window(窗口容器),设置背景为白色,命名为page1
local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
page1:setBackgroundColor(ui.COLOR_BLACK)
4.2.1.6 Window:enableScroll(opts)
功能
启用窗口内容的拖拽滚动与可选的横向分页吸附功能。
参数
opts
参数含义:滚动/分页配置参数表
数据类型:table
是否必选:可选
取值范围:包含以下子参数:
        {
            参数含义:滚动方向
            数据类型:string
            取值范围:"vertical"(纵向), "horizontal"(横向), "both"(双向)
            是否必选:可选
            注意事项:默认"vertical"
            参数示例:"vertical"
            direction = ,
            参数含义:内容区域总宽度
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认等于窗口宽度
            参数示例:640
            contentWidth =  ,
            参数含义:内容区域总高度
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认等于窗口高度
            参数示例:1200
            contentHeight =  ,
            参数含义:拖拽判定阈值
            数据类型:number
            取值范围:大于0的整数,单位像素
            是否必选:可选
            注意事项:默认10像素
            参数示例:8
            threshold =  ,
            参数含义:是否启用分页吸附
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:横向或双向滚动时有效
            参数示例:true
            pagingEnabled =  ,
            参数含义:分页宽度
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认等于窗口宽度
            参数示例:320
            pageWidth =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:可选
注意事项:所有参数均为可选
返回值
local window_self = win:enableScroll(opts)
window_self
含义说明:窗口自身对象
数据类型:table
取值范围:窗口组件对象
注意事项:支持链式调用
返回示例:window_object
示例
ui = require("exeasyui")
-- 创建Window(窗口容器),设置背景为白色,命名为page1
local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
-- 纵向滚动
page1:enableScroll({
    direction = "vertical",
    contentHeight = 1200,
    threshold = 8
})
-- 横向分页
page1:enableScroll({
    direction = "horizontal",
    pagingEnabled = true,
    pageWidth = 320,
    contentWidth = 960
})
4.2.1.7 Window:setContentSize(w, h)
功能
设置内容区域尺寸,影响滚动边界的计算。
参数
w
参数含义:内容区域宽度
数据类型:number
是否必选:可选
取值范围:大于0的整数
注意事项:至少提供w或h其中一个参数
参数示例:640
h
参数含义:内容区域高度
数据类型:number
是否必选:可选
取值范围:大于0的整数
注意事项:至少提供w或h其中一个参数
参数示例:1200
返回值
无
示例
ui = require("exeasyui")
-- 创建Window(窗口容器),设置背景为白色,命名为page1
local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
page1:setContentSize(320, 1200)
page1:setContentSize(640) -- 只设置宽度
page1:setContentSize(nil, 800) -- 只设置高度
4.2.1.8 Window:enableSubpageManager(opts)
功能
启用子页面管理能力,注册返回事件及回调函数。
参数
opts
参数含义:子页面管理配置参数表
数据类型:table
是否必选:可选
取值范围:包含以下子参数:
        {
            参数含义:返回事件名称
            数据类型:string
            取值范围:任意字符串
            是否必选:可选
            注意事项:默认"NAV.BACK"
            参数示例:"NAV_BACK"
            backEventName = ,
            参数含义:返回事件回调函数
            数据类型:function
            取值范围:格式为function() end的函数
            是否必选:可选
            注意事项:在父窗口范围内调用
            参数示例:function() log.info("返回按钮点击") end
            onBack =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:可选
注意事项:通常只需要调用一次
返回值
local window_self = win:enableSubpageManager(opts)
window_self
含义说明:窗口自身对象
数据类型:table
取值范围:窗口组件对象
注意事项:支持链式调用
返回示例:window_object
示例
ui = require("exeasyui")
-- 创建Window(窗口容器),设置背景为白色,命名为page1
local page1 = ui.Window({ backgroundColor = ui.COLOR_WHITE })
page1:enableSubpageManager({
    backEventName = "NAV_BACK",
    onBack = function()
        log.info("导航返回")
    end
})
4.2 1.9 Window:configureSubpages(factories)
功能
注册子页面工厂函数表。
参数
factories
参数含义:子页面工厂函数表
数据类型:table
是否必选:是
取值范围:键值对表,键为子页面名称,值为返回Window对象的函数
注意事项:工厂函数应返回一个Window实例
参数示例:{settings = function() return settings_window end}
返回值
local window_self = Window:configureSubpages(factories)
window_self
含义说明:窗口自身对象
数据类型:table
取值范围:窗口组件对象
注意事项:支持链式调用
返回示例:window_object
示例
-- 引入exEasyUI库
local ui = require("exeasyui")
-- 创建一个msgbox_page页面的函数
-- 这个函数用于创建消息框演示页面
local function msgbox_page()
    -- 创建一个白色背景的窗口容器
    local win = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建"返回"按钮
    local back = ui.Button({
        x = 220, y = 140,        -- 按钮位置(在弹出按钮右边)
        w = 80, h = 50,          -- 按钮尺寸
        text = "返回",           -- 按钮文字
        -- 按钮点击事件:返回上一级页面
        onClick = function()
            win:back()  -- 调用窗口的back方法返回主页
        end
    })
    -- 将组件添加到窗口中
    win:add(back)   -- 添加返回按钮
    return win      -- 返回创建好的窗口对象
end
-- 主程序入口函数
local function exEasyUI_demo()
    -- 等待500毫秒,确保系统初始化完成
    sys.wait(500)
    -- 初始化硬件(lcd显示屏和触摸屏)
    ui.hw.init({})
    -- 初始化UI系统,设置主题为浅色模式
    ui.init({ theme = "light" })
    -- 创建主页面窗口(白色背景)
    local home = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 配置子页面工厂函数
    -- 这里注册了两个子页面:"page1"对应消息框页面,"page2"对应复选框页面
    home:configureSubpages({ 
        page1 = msgbox_page,   -- 消息框演示页面
    })
    -- 创建导航按钮2:进入消息框示例页面  
    local btn2 = ui.Button({
        x = 20, y = 130,   -- 按钮位置(在第一个按钮下方)
        w = 280, h = 50,   -- 按钮尺寸
        text = "消息框示例", -- 按钮文字
        onClick = function()
            -- 点击后显示消息框示例页面
            home:showSubpage("page1")
        end
    })
    -- 将按钮添加到主页面
    home:add(btn2)         -- 消息框示例按钮
    -- 将主页面添加到UI渲染系统
    ui.add(home)
    -- 主渲染循环:持续更新和显示UI
    while true do
        ui.clear()      -- 清空屏幕
        ui.render()     -- 渲染所有可见组件
        sys.wait(30)    -- 等待30毫秒(约33帧/秒)
    end
end
-- 创建并启动主任务
sys.taskInit(exEasyUI_demo)
4.2.1.10 Window:showSubpage(name, factory)
功能
显示指定名称的子页面。
参数
name
参数含义:子页面名称
数据类型:string
是否必选:是
取值范围:已通过configureSubpages注册的名称或任意字符串
注意事项:如果名称未注册,需要提供factory参数
参数示例:"settings"
factory
参数含义:备用工厂函数
数据类型:function
是否必选:可选
取值范围:返回Window对象的函数
注意事项:当name未注册时使用
参数示例:function() return settings_window end
返回值
无
示例
-- 引入exEasyUI库
local ui = require("exeasyui")
-- 创建一个msgbox_page页面的函数
-- 这个函数用于创建消息框演示页面
local function msgbox_page()
    -- 创建一个白色背景的窗口容器
    local win = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建"返回"按钮
    local back = ui.Button({
        x = 220, y = 140,        -- 按钮位置(在弹出按钮右边)
        w = 80, h = 50,          -- 按钮尺寸
        text = "返回",           -- 按钮文字
        -- 按钮点击事件:返回上一级页面
        onClick = function()
            win:back()  -- 调用窗口的back方法返回主页
        end
    })
    -- 将组件添加到窗口中
    win:add(back)   -- 添加返回按钮
    return win      -- 返回创建好的窗口对象
end
-- 主程序入口函数
local function exEasyUI_demo()
    -- 等待500毫秒,确保系统初始化完成
    sys.wait(500)
    -- 初始化硬件(lcd显示屏和触摸屏)
    ui.hw.init({})
    -- 初始化UI系统,设置主题为浅色模式
    ui.init({ theme = "light" })
    -- 创建主页面窗口(白色背景)
    local home = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 配置子页面工厂函数
    -- 这里注册了两个子页面:"page1"对应消息框页面,"page2"对应复选框页面
    home:configureSubpages({ 
        page1 = msgbox_page,   -- 消息框演示页面
    })
    -- 创建导航按钮2:进入消息框示例页面  
    local btn2 = ui.Button({
        x = 20, y = 130,   -- 按钮位置(在第一个按钮下方)
        w = 280, h = 50,   -- 按钮尺寸
        text = "消息框示例", -- 按钮文字
        onClick = function()
            -- 点击后显示消息框示例页面
            home:showSubpage("page1")
        end
    })
    -- 将按钮添加到主页面
    home:add(btn2)         -- 消息框示例按钮
    -- 将主页面添加到UI渲染系统
    ui.add(home)
    -- 主渲染循环:持续更新和显示UI
    while true do
        ui.clear()      -- 清空屏幕
        ui.render()     -- 渲染所有可见组件
        sys.wait(30)    -- 等待30毫秒(约33帧/秒)
    end
end
-- 创建并启动主任务
sys.taskInit(exEasyUI_demo)
4.2.1.11 Window:back()
功能
在子页面中调用,关闭当前子页面并返回父窗口。
参数
无
返回值
无
示例
-- 引入exEasyUI库
local ui = require("exeasyui")
-- 创建一个msgbox_page页面的函数
-- 这个函数用于创建消息框演示页面
local function msgbox_page()
    -- 创建一个白色背景的窗口容器
    local win = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建"返回"按钮
    local back = ui.Button({
        x = 220, y = 140,        -- 按钮位置(在弹出按钮右边)
        w = 80, h = 50,          -- 按钮尺寸
        text = "返回",           -- 按钮文字
        -- 按钮点击事件:返回上一级页面
        onClick = function()
            win:back()  -- 调用窗口的back方法返回主页
        end
    })
    -- 将组件添加到窗口中
    win:add(back)   -- 添加返回按钮
    return win      -- 返回创建好的窗口对象
end
-- 主程序入口函数
local function exEasyUI_demo()
    -- 等待500毫秒,确保系统初始化完成
    sys.wait(500)
    -- 初始化硬件(lcd显示屏和触摸屏)
    ui.hw.init({})
    -- 初始化UI系统,设置主题为浅色模式
    ui.init({ theme = "light" })
    -- 创建主页面窗口(白色背景)
    local home = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 配置子页面工厂函数
    -- 这里注册了两个子页面:"page1"对应消息框页面,"page2"对应复选框页面
    home:configureSubpages({ 
        page1 = msgbox_page,   -- 消息框演示页面
    })
    -- 创建导航按钮2:进入消息框示例页面  
    local btn2 = ui.Button({
        x = 20, y = 130,   -- 按钮位置(在第一个按钮下方)
        w = 280, h = 50,   -- 按钮尺寸
        text = "消息框示例", -- 按钮文字
        onClick = function()
            -- 点击后显示消息框示例页面
            home:showSubpage("page1")
        end
    })
    -- 将按钮添加到主页面
    home:add(btn2)         -- 消息框示例按钮
    -- 将主页面添加到UI渲染系统
    ui.add(home)
    -- 主渲染循环:持续更新和显示UI
    while true do
        ui.clear()      -- 清空屏幕
        ui.render()     -- 渲染所有可见组件
        sys.wait(30)    -- 等待30毫秒(约33帧/秒)
    end
end
-- 创建并启动主任务
sys.taskInit(exEasyUI_demo)
4.2.1.12 Window:closeSubpage(name, opts)
功能
关闭指定名称的子页面。
参数
name
参数含义:要关闭的子页面名称
数据类型:string
是否必选:是
取值范围:已通过showSubpage显示的子页面名称
注意事项:无
参数示例:"settings"
opts
参数含义:关闭选项参数表
数据类型:table
是否必选:可选
取值范围:包含以下子参数:
        {
            参数含义:是否彻底销毁子页面
            数据类型:boolean
            取值范围:true(销毁), false(仅隐藏)
            是否必选:可选
            注意事项:销毁后会触发垃圾回收
            参数示例:true
            destroy = ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:可选
注意事项:无
返回值
local close_result = win:closeSubpage(name, opts)
close_result
含义说明:关闭操作结果
数据类型:boolean
取值范围:true(成功关闭), false(子页面不存在)
注意事项:无
返回示例:true
示例
-- 引入exEasyUI库
local ui = require("exeasyui")
-- 创建一个checkbox_page页面的函数
-- 这个函数用于创建复选框演示页面
local function checkbox_page()
    -- 创建白色背景窗口
    local win = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 创建三个复选框组件
    local cb1 = ui.CheckBox({ x = 20, y = 120, text = "选项A" })  -- 默认未选中
    local cb2 = ui.CheckBox({ x = 20, y = 160, text = "选项B", checked = true })  -- 默认选中
    local cb3 = ui.CheckBox({ x = 20, y = 200, text = "选项C" })  -- 默认未选中
    -- 创建返回主页按钮
    local back = ui.Button({
        x = 20, y = 260, 
        w = 120, h = 40,
        text = "返回主页",
        onClick = function()
            win:back()  -- 返回主页
        end
    })
    -- 将所有组件添加到窗口
    win:add(cb1)    -- 复选框A
    win:add(cb2)    -- 复选框B  
    win:add(cb3)    -- 复选框C
    win:add(back)   -- 返回按钮
    return win      -- 返回窗口对象
end
-- 主程序入口函数
local function exEasyUI_demo()
    -- 等待500毫秒,确保系统初始化完成
    sys.wait(500)
    -- 初始化硬件(lcd显示屏和触摸屏)
    ui.hw.init({})
    -- 初始化UI系统,设置主题为浅色模式
    ui.init({ theme = "light" })
    -- 创建主页面窗口(白色背景)
    local home = ui.Window({ backgroundColor = ui.COLOR_WHITE })
    -- 配置子页面工厂函数
    -- 这里注册了两个子页面:"page1"对应消息框页面,"page2"对应复选框页面
    home:configureSubpages({ 
        page1 = msgbox_page,   -- 消息框演示页面
    })
    -- 创建导航按钮1:进入复选框示例页面
    local btn1 = ui.Button({
        x = 20, y = 60,    -- 按钮位置
        w = 280, h = 50,   -- 按钮尺寸
        text = "复选框示例", -- 按钮文字
        onClick = function()
            -- 点击后显示复选框示例页面
            home:showSubpage("page2")
        end
    })
        -- 创建功能按钮:移除复选框子界面(演示销毁功能)
    local btnRemove = ui.Button({
        x = 20, y = 200,   -- 按钮位置
        w = 280, h = 50,   -- 按钮尺寸
        text = "移除复选框子界面(销毁)", -- 按钮文字
        onClick = function()
            -- 强制销毁缓存的checkbox子页面,释放内存
            home:closeSubpage("page2", { destroy = true })
        end
    })
    -- 将按钮添加到主页面
    home:add(btn2)         -- 消息框示例按钮
    home:add(btnRemove)    -- 移除页面按钮
    -- 将主页面添加到UI渲染系统
    ui.add(home)
    -- 主渲染循环:持续更新和显示UI
    while true do
        ui.clear()      -- 清空屏幕
        ui.render()     -- 渲染所有可见组件
        sys.wait(30)    -- 等待30毫秒(约33帧/秒)
    end
end
-- 创建并启动主任务
sys.taskInit(exEasyUI_demo)
4.2.2 exeasyui.Label(opts)
功能
创建文本标签组件。
参数
opts
参数含义:标签配置参数表
数据类型:table
是否必选:是
取值范围:包含以下子参数:
        {
            参数含义:标签左上角X坐标
            数据类型:number
            取值范围:0到屏幕宽度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            x =  ,
            参数含义:标签左上角Y坐标
            数据类型:number
            取值范围:0到屏幕高度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            y =  ,
            参数含义:标签显示文本
            数据类型:string
            取值范围:任意字符串
            是否必选:是
            注意事项:支持中文
            参数示例:"Hello World"
            text =  ,
            参数含义:标签文本颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            color =  ,
            参数含义:标签文本大小
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认使用系统字体大小
            参数示例:12
            size =  ,
            参数含义:标签宽度
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:不设置时自动计算文本宽度
            参数示例:100
            w =  ,
            参数含义:是否启用自动换行
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:启用时需要设置w参数
            参数示例:true
            wordWrap =  ,
            参数含义:自定义字体指针
            数据类型:userdata
            取值范围:有效的字体对象
            是否必选:可选
            注意事项:高级用法,通常不需要设置
            参数示例:lcd.font_opposansm12
            font =  ,
            参数含义:标签是否可见
            数据类型:boolean
            取值范围:true(可见), false(不可见)
            是否必选:可选
            注意事项:默认可见
            参数示例:true
            visible =  ,
            参数含义:标签是否启用
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:标签不响应事件,此参数主要用于布局
            参数示例:true
            enabled =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:是
注意事项:必须包含位置和文本参数
返回值
local label_component = exeasyui.Label(opts)
label_component
含义说明:标签组件对象
数据类型:table
取值范围:包含draw、handleEvent、setText等方法的组件对象
注意事项:需要调用exeasyui.add添加到渲染队列
返回示例:label_object
示例
-- 创建单行标签
local label1 = exeasyui.Label({
    x = 10, y = 150,
    text = "单行文本",
    color = exeasyui.COLOR_WHITE,
    size = 16
})
-- 创建自动换行标签
local label2 = exeasyui.Label({
    x = 10, y = 180,
    w = 200,
    text = "这是一段很长的文本,当启用自动换行时会根据宽度自动换行显示",
    wordWrap = true,
    color = exeasyui.COLOR_YELLOW
})
exeasyui.add(label1)
exeasyui.add(label2)
-- 动态更新文本
label1:setText("更新后的文本")
label1:setSize(18)  -- 更改字体大小
4.2.2.1 Label:setText(t)
功能
设置标签显示的文本。
参数
t
参数含义:新的标签文本
数据类型:string
是否必选:是
取值范围:任意字符串
注意事项:支持自动换行标签
参数示例:"新标签文本"
返回值
无
示例
local label = exeasyui.Label({x=10, y=10, text="原始文本"})
label:setText("更新后的文本")
4.2.2.2 Label:setSize(sz)
功能
设置标签文本的字体大小,仅使用外置 gtfont 矢量字体有效。
参数
sz
参数含义:字体大小
数据类型:number
是否必选:是
取值范围:大于0的整数
注意事项:会影响标签的宽度和高度计算
参数示例:16
返回值
无
示例
local label = exeasyui.Label({x=10, y=10, text="文本", size=12})
label:setSize(16) -- 增大字体大小
4.2.3 exeasyui.Button(opts)
功能
创建按钮组件,支持文本按钮和图片按钮。
参数
opts
参数含义:按钮配置参数表
数据类型:table
是否必选:是
取值范围:包含以下子参数:
        {
            参数含义:按钮左上角X坐标
            数据类型:number
            取值范围:0到屏幕宽度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            x =  ,
            参数含义:按钮左上角Y坐标
            数据类型:number
            取值范围:0到屏幕高度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            y =  ,
            参数含义:按钮宽度
            数据类型:number
            取值范围:大于0的整数
            是否必选:是
            注意事项:必须为整数
            参数示例:100
            w =  ,
            参数含义:按钮高度
            数据类型:number
            取值范围:大于0的整数
            是否必选:是
            注意事项:必须为整数
            参数示例:36
            h =  ,
            参数含义:按钮显示文本
            数据类型:string
            取值范围:任意字符串
            是否必选:文本模式和图片模式二选一
            注意事项:与src参数互斥
            参数示例:"确定"
            text =  ,
            参数含义:按钮背景颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_BLUE
            bgColor =  ,
            参数含义:按钮文本颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            textColor =  ,
            参数含义:按钮边框颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_GRAY
            borderColor =  ,
            参数含义:按钮文本大小
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:文本模式有效
            参数示例:12
            textSize =  ,
            参数含义:按钮图片路径(图片模式)
            数据类型:string
            取值范围:有效的JPG文件路径
            是否必选:文本模式和图片模式二选一
            注意事项:与text参数互斥
            参数示例:"/luadb/button.jpg"
            src =  ,
            参数含义:按下状态图片路径
            数据类型:string
            取值范围:有效的JPG文件路径
            是否必选:可选
            注意事项:图片模式有效
            参数示例:"/luadb/button_pressed.jpg"
            src_pressed =  ,
            参数含义:切换状态图片路径
            数据类型:string
            取值范围:有效的JPG文件路径
            是否必选:可选
            注意事项:toggle模式有效
            参数示例:"/luadb/button_toggled.jpg"
            src_toggled =  ,
            参数含义:是否为切换按钮
            数据类型:boolean
            取值范围:true(是), false(否)
            是否必选:可选
            注意事项:启用后按钮将在按下/抬起状态间切换
            参数示例:true
            toggle =  ,
            参数含义:切换按钮初始状态
            数据类型:boolean
            取值范围:true(按下), false(抬起)
            是否必选:可选
            注意事项:toggle模式有效
            参数示例:false
            toggled =  ,
            参数含义:按钮点击回调函数
            数据类型:function
            取值范围:格式为function(button) end的函数
            是否必选:可选
            注意事项:按钮被点击时调用
            参数示例:function(btn) log.info("点击", btn.text) end
            onClick =  ,
            参数含义:切换状态变化回调函数
            数据类型:function
            取值范围:格式为function(toggled, button) end的函数
            是否必选:可选
            注意事项:toggle模式有效
            参数示例:function(state, btn) log.info("切换", state) end
            onToggle =  ,
            参数含义:按钮是否可见
            数据类型:boolean
            取值范围:true(可见), false(不可见)
            是否必选:可选
            注意事项:默认可见
            参数示例:true
            visible =  ,
            参数含义:按钮是否启用
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:禁用时不响应触摸事件
            参数示例:true
            enabled =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:是
注意事项:必须包含位置和尺寸参数
返回值
local button_component = exeasyui.Button(opts)
button_component
含义说明:按钮组件对象
数据类型:table
取值范围:包含draw、handleEvent等方法的组件对象
注意事项:需要调用exeasyui.add添加到渲染队列
返回示例:button_object
示例
-- 创建文本按钮
local btn = exeasyui.Button({
    x = 50, y = 50, w = 100, h = 36,
    text = "确定",
    bgColor = exeasyui.COLOR_BLUE,
    textColor = exeasyui.COLOR_WHITE,
    onClick = function(button)
        log.info("按钮被点击", button.text)
    end
})
-- 创建图片按钮
local imgBtn = exeasyui.Button({
    x = 160, y = 50, w = 64, h = 64,
    src = "/luadb/icon.jpg",
    src_pressed = "/luadb/icon_pressed.jpg",
    toggle = true,
    onToggle = function(state)
        log.info("切换状态", state)
    end
})
exeasyui.add(btn)
exeasyui.add(imgBtn)
4.2.3.1 Button:setText(newText)
功能
设置按钮显示的文本。
参数
newText
参数含义:新的按钮文本
数据类型:string
是否必选:是
取值范围:任意字符串
注意事项:仅文本按钮有效
参数示例:"新文本"
返回值
无
示例
local btn = exeasyui.Button({x=10, y=10, w=100, h=36, text="原始文本"})
btn:setText("更新后的文本")
4.2.4 exeasyui.ProgressBar(opts)
功能
创建进度条组件。
参数
opts
参数含义:进度条配置参数表
数据类型:table
是否必选:是
取值范围:包含以下子参数:
        {
            参数含义:进度条左上角X坐标
            数据类型:number
            取值范围:0到屏幕宽度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            x =  ,
            参数含义:进度条左上角Y坐标
            数据类型:number
            取值范围:0到屏幕高度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            y =  ,
            参数含义:进度条宽度
            数据类型:number
            取值范围:大于0的整数
            是否必选:是
            注意事项:必须为整数
            参数示例:200
            w =  ,
            参数含义:进度条高度
            数据类型:number
            取值范围:大于0的整数
            是否必选:是
            注意事项:必须为整数
            参数示例:24
            h =  ,
            参数含义:进度条初始进度
            数据类型:number
            取值范围:0到100的数值
            是否必选:可选
            注意事项:默认0
            参数示例:50
            progress =  ,
            参数含义:是否显示百分比
            数据类型:boolean
            取值范围:true(显示), false(不显示)
            是否必选:可选
            注意事项:默认显示
            参数示例:true
            showPercentage =  ,
            参数含义:自定义进度文本
            数据类型:string
            取值范围:任意字符串
            是否必选:可选
            注意事项:设置后覆盖百分比显示
            参数示例:"下载中..."
            text =  ,
            参数含义:文本大小
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认使用系统字体大小
            参数示例:12
            textSize =  ,
            参数含义:背景颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_GRAY
            backgroundColor =  ,
            参数含义:进度条颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_BLUE
            progressColor =  ,
            参数含义:边框颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            borderColor =  ,
            参数含义:文本颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            textColor =  ,
            参数含义:进度条是否可见
            数据类型:boolean
            取值范围:true(可见), false(不可见)
            是否必选:可选
            注意事项:默认可见
            参数示例:true
            visible =  ,
            参数含义:进度条是否启用
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:进度条不响应触摸事件
            参数示例:true
            enabled =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:是
注意事项:必须包含位置和尺寸参数
返回值
local progressbar_component = exeasyui.ProgressBar(opts)
progressbar_component
含义说明:进度条组件对象
数据类型:table
取值范围:包含draw、handleEvent、setProgress等方法的组件对象
注意事项:需要调用exeasyui.add添加到渲染队列
返回示例:progressbar_object
示例
-- 创建进度条
local progress = exeasyui.ProgressBar({
    x = 10, y = 350,
    w = 300, h = 24,
    progress = 0,
    progressColor = exeasyui.COLOR_BLUE,
    text = "初始化..."
})
exeasyui.add(progress)
-- 动态更新进度
for i = 0, 100, 10 do
    progress:setProgress(i)
    progress:setText("下载中 " .. i .. "%")
    sys.wait(500)
end
progress:setText("完成!")
4.2.4.1 ProgressBar:setProgress(value)
功能
设置进度条的当前进度值。
参数
value
参数含义:进度值
数据类型:number
是否必选:是
取值范围:0到100的数值
注意事项:会自动限制在0-100范围内,超出范围会自动修正
参数示例:75
返回值
无
示例
local progress = exeasyui.ProgressBar({x=10, y=10, w=200, h=24, progress=0})
progress:setProgress(50) -- 设置进度为50%
-- 进度值会自动限制在0-100范围内
progress:setProgress(150) -- 实际进度为100
progress:setProgress(-10) -- 实际进度为0
4.2.4.2 ProgressBar:getProgress()
功能
获取进度条的当前进度值。
参数
无
返回值
local progress_value = progress:getProgress()
progress_value
含义说明:当前进度值
数据类型:number
取值范围:0到100的数值
注意事项:返回的是实际设置的进度值,不是估算值
返回示例:50
示例
local progress = exeasyui.ProgressBar({ x = 10, y = 10, w = 200, h = 24, progress = 30 })
local currentProgress = progress:getProgress() -- 返回30
log.info("当前进度", currentProgress .. "%")
-- 在循环中监控进度
for i = 0, 100, 10 do
    progress:setProgress(i)
    sys.wait(200)
    local current = progress:getProgress()
    log.info("进度更新", current .. "%")
end
4.2.4.3 ProgressBar:setText(text)
功能
设置进度条显示的文本内容。
参数
text
参数含义:显示的文本内容
数据类型:string
是否必选:是
取值范围:任意字符串
注意事项:设置自定义文本后会覆盖百分比显示,设置为nil或空字符串可恢复百分比显示
参数示例:"下载中..."
返回值
无
示例
local progress = exeasyui.ProgressBar({ x = 10, y = 10, w = 200, h = 24, progress = 0 })
-- 设置自定义文本
progress:setText("初始化...")
progress:setProgress(0)
-- 更新进度和文本
progress:setProgress(25)
progress:setText("下载文件...")
progress:setProgress(50)
progress:setText("处理数据...")
progress:setProgress(75)
progress:setText("完成中...")
progress:setProgress(100)
progress:setText("完成!")
-- 恢复显示百分比
progress:setText(nil)    -- 或 progress:setText("")
progress:setProgress(50) -- 现在会显示"50%"
4.2.5 exeasyui.MessageBox(opts)
功能
创建消息框组件,包含标题、消息文本和按钮组。
参数
opts
参数含义:消息框配置参数表
数据类型:table
是否必选:是
取值范围:包含以下子参数:
        {
            参数含义:消息框左上角X坐标
            数据类型:number
            取值范围:0到屏幕宽度
            是否必选:可选
            注意事项:不设置时默认居中显示
            参数示例:20
            x =  ,
            参数含义:消息框左上角Y坐标
            数据类型:number
            取值范围:0到屏幕高度
            是否必选:可选
            注意事项:不设置时默认居中显示
            参数示例:40
            y =  ,
            参数含义:消息框宽度
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认280
            参数示例:280
            w =  ,
            参数含义:消息框高度
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认160
            参数示例:160
            h =  ,
            参数含义:消息框标题
            数据类型:string
            取值范围:任意字符串
            是否必选:可选
            注意事项:默认"Info"
            参数示例:"提示"
            title =  ,
            参数含义:消息框内容文本
            数据类型:string
            取值范围:任意字符串
            是否必选:可选
            注意事项:默认空字符串
            参数示例:"操作成功!"
            message =  ,
            参数含义:是否启用自动换行
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:默认启用
            参数示例:true
            wordWrap =  ,
            参数含义:文本大小
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认使用系统字体大小
            参数示例:12
            textSize =  ,
            参数含义:边框颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            borderColor =  ,
            参数含义:文本颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            textColor =  ,
            参数含义:背景颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_BLACK
            bgColor =  ,
            参数含义:按钮文本数组
            数据类型:table
            取值范围:包含按钮文本字符串的数组
            是否必选:可选
            注意事项:不设置,默认为{"OK"},显示OK按钮
            参数示例:{"确定", "取消"}
            buttons =  ,
            参数含义:按钮点击回调函数
            数据类型:function
            取值范围:格式为function(button_text) end的函数
            是否必选:可选
            注意事项:点击按钮时调用,参数为按钮文本
            参数示例:function(btnText) log.info("点击", btnText) end
            onResult =  ,
            参数含义:消息框是否可见
            数据类型:boolean
            取值范围:true(可见), false(不可见)
            是否必选:可选
            注意事项:默认可见
            参数示例:true
            visible =  ,
            参数含义:消息框是否启用
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:禁用时不响应触摸事件
            参数示例:true
            enabled =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:是
注意事项:通常需要设置title、message和onResult参数
返回值
local messagebox_component = exeasyui.MessageBox(opts)
messagebox_component
含义说明:消息框组件对象
数据类型:table
取值范围:包含draw、handleEvent、show、hide等方法的组件对象
注意事项:需要调用exeasyui.add添加到渲染队列
返回示例:messagebox_object
示例
-- 创建消息框
local msgbox = exeasyui.MessageBox({
    title = "确认操作",
    message = "您确定要执行此操作吗?",
    buttons = {"确定", "取消"},
    onResult = function(btnText)
        if btnText == "确定" then
            log.info("用户点击了确定")
        else
            log.info("用户点击了取消")
        end
    end
})
exeasyui.add(msgbox)
-- 动态更新消息框内容
msgbox:setTitle("新标题")
msgbox:setMessage("新的消息内容")
-- 显示/隐藏消息框
msgbox:show()
msgbox:hide()
4.2.5.1 MessageBox:show()
功能
显示消息框。
参数
无
返回值
无
示例
local msgbox = exeasyui.MessageBox({
    title = "提示",
    message = "这是一个消息框",
    buttons = { "确定" }
})
msgbox:show()
4.2.5.2 MessageBox:hide()
功能
隐藏消息框。
参数
无
返回值
无
示例
local msgbox = exeasyui.MessageBox({
    title = "提示",
    message = "这是一个消息框",
    buttons = { "确定" }
})
msgbox:hide()
4.2.5.3 MessageBox:setTitle(title)
功能
设置消息框标题。
参数
title
参数含义:新的标题文本
数据类型:string
是否必选:是
取值范围:任意字符串
注意事项:无
参数示例:"新标题"
返回值
无
示例
local msgbox = exeasyui.MessageBox({ title = "原始标题", message = "内容" })
msgbox:setTitle("更新后的标题")
4.2.5.4 MessageBox:setMessage(message)
功能
设置消息框内容文本。
参数
message
参数含义:新的消息内容
数据类型:string
是否必选:是
取值范围:任意字符串
注意事项:如果启用了自动换行,会重新计算行缓存
参数示例:"新的消息内容"
返回值
无
示例
local msgbox = exeasyui.MessageBox({ title = "标题", message = "原始内容" })
msgbox:setMessage("更新后的内容")
4.2.6 exeasyui.CheckBox(opts)
功能
创建复选框组件。
参数
opts
参数含义:复选框配置参数表
数据类型:table
是否必选:是
取值范围:包含以下子参数:
        {
            参数含义:复选框左上角X坐标
            数据类型:number
            取值范围:0到屏幕宽度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            x =  ,
            参数含义:复选框左上角Y坐标
            数据类型:number
            取值范围:0到屏幕高度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            y =  ,
            参数含义:复选框方框尺寸
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:默认16
            参数示例:16
            boxSize =  ,
            参数含义:复选框文本
            数据类型:string
            取值范围:任意字符串
            是否必选:可选
            注意事项:显示在复选框右侧的说明文字
            参数示例:"同意协议"
            text =  ,
            参数含义:复选框文本颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            textColor =  ,
            参数含义:复选框边框颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            borderColor =  ,
            参数含义:复选框背景颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_BLACK
            bgColor =  ,
            参数含义:复选框勾选颜色
            数据类型:number
            取值范围:第三章常量解释中的3.1-3.17章节中的颜色常量,或其他16位RGB565颜色值
            是否必选:可选
            注意事项:不设置时根据主题自动选择
            参数示例:exeasyui.COLOR_WHITE
            tickColor =  ,
            参数含义:复选框初始状态
            数据类型:boolean
            取值范围:true(选中), false(未选中)
            是否必选:可选
            注意事项:默认未选中
            参数示例:false
            checked =  ,
            参数含义:复选框状态变化回调函数
            数据类型:function
            取值范围:格式为function(checked) end的函数
            是否必选:可选
            注意事项:状态变化时调用
            参数示例:function(state) log.info("状态", state) end
            onChange =  ,
            参数含义:复选框是否可见
            数据类型:boolean
            取值范围:true(可见), false(不可见)
            是否必选:可选
            注意事项:默认可见
            参数示例:true
            visible =  ,
            参数含义:复选框是否启用
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:禁用时不响应触摸事件
            参数示例:true
            enabled =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:是
注意事项:必须包含位置参数
返回值
local checkbox_component = exeasyui.CheckBox(opts)
checkbox_component
含义说明:复选框组件对象
数据类型:table
取值范围:包含draw、handleEvent、setChecked等方法的组件对象
注意事项:需要调用exeasyui.add添加到渲染队列
返回示例:checkbox_object
示例
-- 创建复选框
local checkbox = exeasyui.CheckBox({
    x = 10, y = 100,
    text = "启用功能",
    checked = false,
    onChange = function(checked)
        log.info("复选框状态", checked)
    end
})
exeasyui.add(checkbox)
-- 动态设置选中状态
checkbox:setChecked(true)
-- 切换状态
checkbox:toggle()
4.2.6.1 CheckBox:setChecked(v)
功能
设置复选框的选中状态。
参数
v
参数含义:选中状态
数据类型:boolean
是否必选:是
取值范围:true(选中), false(未选中)
注意事项:状态变化会触发onChange回调
参数示例:true
返回值
无
示例
local checkbox = exeasyui.CheckBox({ x = 10, y = 10, text = "选项" })
checkbox:setChecked(true)
4.2.6.2 CheckBox:toggle()
功能
切换复选框的选中状态。
参数
无
返回值
无
示例
local checkbox = exeasyui.CheckBox({ x = 10, y = 10, text = "选项" })
checkbox:toggle() -- 从未选中变为选中
checkbox:toggle() -- 从选中变为未选中
4.2.7 exeasyui.Picture(opts)
功能
创建图片显示组件,支持单图和轮播图。
参数
opts
参数含义:图片配置参数表
数据类型:table
是否必选:是
取值范围:包含以下子参数:
        {
            参数含义:图片左上角X坐标
            数据类型:number
            取值范围:0到屏幕宽度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            x =  ,
            参数含义:图片左上角Y坐标
            数据类型:number
            取值范围:0到屏幕高度
            是否必选:是
            注意事项:必须为整数
            参数示例:10
            y =  ,
            参数含义:单张图片路径
            数据类型:string
            取值范围:有效的JPG文件路径
            是否必选:单图和轮播图二选一
            注意事项:与sources参数互斥
            参数示例:"/luadb/image.jpg"
            src =  ,
            参数含义:轮播图片路径数组
            数据类型:table
            取值范围:包含多个JPG文件路径的数组
            是否必选:单图和轮播图二选一
            注意事项:与src参数互斥
            参数示例:{"/luadb/img1.jpg", "/luadb/img2.jpg", "/luadb/img3.jpg"}
            sources =  ,
            参数含义:轮播初始索引
            数据类型:number
            取值范围:大于0的整数
            是否必选:可选
            注意事项:sources模式有效
            参数示例:1
            index =  ,
            参数含义:是否启用自动轮播
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:sources模式有效
            参数示例:true
            autoplay =  ,
            参数含义:轮播间隔时间
            数据类型:number
            取值范围:大于0的整数,单位毫秒
            是否必选:可选
            注意事项:autoplay模式有效
            参数示例:1000
            interval =  ,
            参数含义:图片是否可见
            数据类型:boolean
            取值范围:true(可见), false(不可见)
            是否必选:可选
            注意事项:默认可见
            参数示例:true
            visible =  ,
            参数含义:图片是否启用
            数据类型:boolean
            取值范围:true(启用), false(禁用)
            是否必选:可选
            注意事项:禁用时不响应触摸事件
            参数示例:true
            enabled =  ,
        }
数据类型:table
取值范围:参数含义中规定的参数
是否必选:是
注意事项:必须包含位置和尺寸参数
返回值
local picture_component = exeasyui.Picture(opts)
picture_component
含义说明:图片组件对象
数据类型:table
取值范围:包含draw、handleEvent、next、prev等方法的组件对象
注意事项:需要调用exeasyui.add添加到渲染队列
返回示例:picture_object
示例
-- 创建单张图片
local pic1 = exeasyui.Picture({
    x = 10, y = 250,
    src = "/luadb/photo.jpg"
})
-- 创建轮播图
local pic2 = exeasyui.Picture({
    x = 120, y = 250,
    sources = {"/luadb/slide1.jpg", "/luadb/slide2.jpg", "/luadb/slide3.jpg"},
    autoplay = true,
    interval = 2000
})
exeasyui.add(pic1)
exeasyui.add(pic2)
-- 手动控制轮播
pic2:next()  -- 下一张
pic2:prev()  -- 上一张
pic2:play()  -- 开始自动播放
pic2:pause() -- 暂停自动播放
-- 动态设置图片源
pic2:setSources({"/luadb/new1.jpg", "/luadb/new2.jpg"})
4.2.7.1 Picture:setSources(list)
功能
设置轮播图片源列表。
参数
list
参数含义:图片路径数组
数据类型:table
是否必选:是
取值范围:包含多个JPG文件路径的数组
注意事项:会重置当前轮播索引到第一张
参数示例:{"/luadb/img1.jpg", "/luadb/img2.jpg"}
返回值
无
示例
local pic = exeasyui.Picture({ x = 10, y = 10 })
pic:setSources({ "slide1.jpg", "slide2.jpg", "slide3.jpg" })
4.2.7.2 Picture:next()
功能
切换到下一张图片。
参数
无
返回值
无
示例
local pic = exeasyui.Picture({
    x = 10,
    y = 10,
    sources = { "/luadb/1.jpg", "/luadb/2.jpg", "/luadb/3.jpg" }
})
pic:next() -- 显示2.jpg
4.2.7.3 Picture:prev()
功能
切换到上一张图片。
参数
无
返回值
无
示例
local pic = exeasyui.Picture({
    x = 10,
    y = 10,
    sources = { "/luadb/1.jpg", "/luadb/2.jpg", "/luadb/3.jpg" },
    index = 2
})
pic:prev() -- 显示1.jpg
4.2.7.4 Picture:play()
功能
开始自动轮播。
参数
无
返回值
无
示例
local pic = exeasyui.Picture({
    x = 10,
    y = 10,
    sources = { "/luadb/1.jpg", "/luadb/2.jpg", "/luadb/3.jpg" },
    autoplay = false
})
pic:play() -- 开始自动轮播
4.2.7.5 Picture:pause()
功能
暂停自动轮播。
参数
无
返回值
无
示例
local pic = exeasyui.Picture({
    x = 10,
    y = 10,
    sources = { "/luadb/1.jpg", "/luadb/2.jpg", "/luadb/3.jpg" },
    autoplay = true
})
pic:pause() -- 暂停自动轮播
五、产品支持说明
- lcd 需要硬件支持, 请确认你的设备有 lcd 屏幕接口,可以查看选型手册对应型号及固件是否支持 lcd 功能或 lcd 库以及 tp 库
- 支持 SPI QSPI RGB 等多种接口的 lcd 屏幕, 取决于具体的硬件
- 对于 Air780EHM/EGH/EHV/Air8000 系列, 如果开启 JPG 硬件解码, JPG 图片的长宽都需要是 16 的倍数, 否则会出现画面拉伸的现象