M5Canvas

M5Canvas是一个强大的图形控件,提供可绘制的表面,用于在用户界面中创建自定义图形、动画和视觉效果。它支持绘图操作、图像管理和高级图形渲染。

UiFlow2 应用示例

绘制基本形状

在UiFlow2中打开 cores3_canvas_basic_example.m5f2 项目。

此示例演示如何创建画布并绘制矩形、圆形和线条等基本图形。

UiFlow2 代码块:

cores3_canvas_basic_example.png

示例输出:

包含各种彩色图形的画布,包括矩形、圆形和线条。

MicroPython 应用示例

绘制基本形状

此示例演示如何以编程方式创建画布并绘制基本图形。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8import m5ui
 9import lvgl as lv
10
11
12page0 = None
13canvas0 = None
14
15
16y = None
17x = None
18
19
20def setup():
21    global page0, canvas0, x, y
22
23    M5.begin()
24    Widgets.setRotation(1)
25    m5ui.init()
26    page0 = m5ui.M5Page(bg_c=0xFFFFFF)
27    canvas0 = m5ui.M5Canvas(
28        x=120,
29        y=100,
30        w=80,
31        h=40,
32        color_format=lv.COLOR_FORMAT.ARGB8888,
33        bg_c=0x4994EC,
34        bg_opa=255,
35        parent=page0,
36    )
37
38    page0.set_bg_color(0xFFCCCC, 255, 0)
39    page0.screen_load()
40    for y in range(10, 21):
41        for x in range(5, 76):
42            canvas0.set_px(x, y, 0x4994EC, 50)
43    for y in range(20, 31):
44        for x in range(5, 76):
45            canvas0.set_px(x, y, 0x4994EC, 20)
46    for y in range(30, 41):
47        for x in range(5, 76):
48            canvas0.set_px(x, y, 0x4994EC, 0)
49
50
51def loop():
52    global page0, canvas0, x, y
53    M5.update()
54
55
56if __name__ == "__main__":
57    try:
58        setup()
59        while True:
60            loop()
61    except (Exception, KeyboardInterrupt) as e:
62        try:
63            m5ui.deinit()
64            from utility import print_error_msg
65
66            print_error_msg(e)
67        except ImportError:
68            print("please update to latest firmware")

示例输出:

显示不同颜色几何图形的画布。

API参考

M5Canvas

class m5ui.canvas.M5Canvas(*args, **kwargs)

基类:canvas

创建用于绘图的画布控件。

参数:
  • x (int) – 画布的x坐标。

  • y (int) – 画布的y坐标。

  • w (int) – 画布的宽度。

  • h (int) – 画布的高度。

  • color_format (lv.COLOR_FORMAT) – 画布的颜色格式(默认为ARGB8888)。

  • bg_c (int) – 十六进制格式的画布背景颜色(例如,0xRRGGBB)。

  • bg_opa (int) – 背景的不透明度(0-255)。

  • parent (lv.obj) – 画布的父对象。如果未指定,将设置为活动屏幕。

set_flag(flag, value)

为对象设置标志。如果 value 为True,则添加标志;如果为False,则移除标志。

参数:
  • flag (int) – 要设置的标志。

  • value (bool) – 如果为True,则添加标志;如果为False,则移除标志。

返回:

None

UiFlow2 代码块:

set_flag.png

MicroPython 代码块:

canvas_0.set_flag(lv.obj.FLAG.HIDDEN, True)
toggle_flag(flag)

切换对象上的标志。如果标志已设置,则移除它;如果未设置,则添加它。

参数:

flag (int) – 要切换的标志。

返回:

None

UiFlow2 代码块:

toggle_flag.png

MicroPython 代码块:

canvas_0.toggle_flag(lv.obj.FLAG.HIDDEN)
set_pos(x, y)

设置画布的位置。

参数:
  • x (int) – 画布的x坐标。

  • y (int) – 画布的y坐标。

返回:

None

UiFlow2 代码块:

set_pos.png

MicroPython 代码块:

canvas_0.set_pos(100, 100)
set_x(x)

设置画布的x坐标。

参数:

x (int) – 画布的x坐标。

返回:

None

UiFlow2 代码块:

set_x.png

MicroPython 代码块:

canvas_0.set_x(100)
set_y(y)

设置画布的y坐标。

参数:

y (int) – 画布的y坐标。

返回:

None

UiFlow2 代码块:

set_y.png

MicroPython 代码块:

canvas_0.set_y(100)
align_to(obj, align, x, y)

将画布对齐到另一个对象。

参数:
  • obj (lv.obj) – 要对齐到的对象。

  • align (int) – 对齐类型。

  • x (int) – 相对于对齐对象的x偏移量。

  • y (int) – 相对于对齐对象的y偏移量。

返回:

None

UiFlow2 代码块:

align_to.png

MicroPython 代码块:

canvas_0.align_to(page_0, lv.ALIGN.CENTER, 0, 0)
set_size(width, height)

设置画布的尺寸。

参数:
  • width (int) – 画布的宽度。

  • height (int) – 画布的高度。

返回:

None

UiFlow2 代码块:

set_size.png

MicroPython 代码块:

canvas_0.set_size(200, 100)
set_width(width)

设置画布的宽度。

参数:

width (int) – 画布的宽度。

返回:

None

UiFlow2 代码块:

set_width.png

MicroPython 代码块:

canvas_0.set_width(200)
set_height(height)

设置画布的高度。

参数:

height (int) – 画布的高度。

返回:

None

UiFlow2 代码块:

set_height.png

MicroPython 代码块:

canvas_0.set_height(100)
get_width()

获取画布的宽度。

返回:

画布的宽度。

返回类型:

int

UiFlow2 代码块:

get_width.png

MicroPython 代码块:

width = canvas_0.get_width()
get_height()

获取画布的高度。

返回:

画布的高度。

返回类型:

int

UiFlow2 代码块:

get_height.png

MicroPython 代码块:

height = canvas_0.get_height()
fill_bg(color, opa)

用指定的颜色和不透明度填充画布背景。

参数:
  • color (int) – 十六进制格式的背景颜色(例如,0xRRGGBB)。

  • opa (int) – 背景的不透明度(0-255)。

UiFlow2 代码块:

set_bg_color.png

MicroPython 代码块:

canvas_0.fill_bg(0x001122, 255)
set_px(x, y, color, opa)

在(x, y)位置设置具有指定颜色和不透明度的像素。

参数:
  • x (int) – 像素的x坐标。

  • y (int) – 像素的y坐标。

  • color (int) – 十六进制格式的像素颜色(例如,0xRRGGBB)。

  • opa (int) – 像素的不透明度(0-255)。

UiFlow2 代码块:

set_px.png

MicroPython 代码块:

canvas_0.set_px(100, 100, 0xFF0000, 255)
get_px_color(x, y)

获取(x, y)位置像素的颜色。

参数:
  • x (int) – 像素的x坐标。

  • y (int) – 像素的y坐标。

返回:

十六进制格式的像素颜色(例如,0xRRGGBB)。

返回类型:

int

UiFlow2 代码块:

get_px_color.png

MicroPython 代码块:

color = canvas_0.get_px_color(100, 100)
print(hex(color))  # Prints the color in hexadecimal format
get_px_opa(x, y)

获取(x, y)位置像素的不透明度。

参数:
  • x (int) – 像素的x坐标。

  • y (int) – 像素的y坐标。

返回:

像素的不透明度(0-255)。

返回类型:

int

UiFlow2 代码块:

get_px_opa.png

MicroPython 代码块:


draw_arc(x, y, r, color=0, opa=lvgl.OPA.COVER, width=1, start_angle=0, end_angle=90)

在画布上绘制弧形。

参数:
  • x (int) – 弧形中心的x坐标。

  • y (int) – 弧形中心的y坐标。

  • r (int) – 弧形的半径。

  • color (int) – 十六进制格式的弧形颜色(例如,0xRRGGBB)。

  • opa (int) – 弧形的不透明度(0-255)。

  • width (int) – 弧形线条的宽度。

  • start_angle (int) – 弧形的起始角度(以度为单位)。

  • end_angle (int) – 弧形的结束角度(以度为单位)。

UiFlow2 代码块:

draw_arc.png

MicroPython 代码块:

canvas_0.draw_arc(100, 100, 50, 0xFF0000, 255, 2, 0, 180)
draw_rect(x, y, w, h, radius=0, bg_c=16777215, bg_opa=lvgl.OPA.COVER, border_c=16777215, border_opa=lvgl.OPA.COVER, border_w=0, border_side=lvgl.BORDER_SIDE.FULL, outline_c=0, outline_opa=lvgl.OPA.COVER, outline_w=0, outline_pad=0, shadow_c=0, shadow_opa=lvgl.OPA.COVER, shadow_w=0, shadow_offset_x=0, shadow_offset_y=0, shadow_spread=0)

在画布上绘制矩形。

参数:
  • x (int) – 矩形的x坐标。

  • y (int) – 矩形的y坐标。

  • w (int) – 矩形的宽度。

  • h (int) – 矩形的高度。

  • radius (int) – 矩形的圆角半径。

  • bg_c (int) – 十六进制格式的矩形背景颜色(例如,0xRRGGBB)。

  • bg_opa (int) – 背景的不透明度(0-255)。

  • border_c (int) – 十六进制格式的矩形边框颜色(例如,0xRRGGBB)。

  • border_opa (int) – 边框的不透明度(0-255)。

  • border_w (int) – 边框的宽度。

  • border_side (int) – 要绘制的边框边(例如,lv.BORDER_SIDE.FULL)。

  • outline_c (int) – 矩形轮廓颜色的十六进制格式(例如 0xRRGGBB)。

  • outline_opa (int) – 轮廓的不透明度(0-255)。

  • outline_w (int) – 轮廓线的宽度。

  • outline_pad (int) – 轮廓的内边距。

  • shadow_c (int) – 矩形阴影颜色的十六进制格式(例如 0xRRGGBB)。

  • shadow_opa (int) – 阴影的不透明度(0-255)。

  • shadow_w (int) – 阴影的宽度。

  • shadow_offset_x (int) – 阴影的水平偏移量。

  • shadow_offset_y (int) – 阴影的垂直偏移量。

  • shadow_spread (int) – 阴影的扩散。

UiFlow2 代码块:

draw_rect.png

MicroPython 代码块:

canvas_0.draw_rect(10, 10, 100, 50, radius=5, bg_c=0xFF0000,
                   bg_opa=255, border_c=0x00FF00, border_opa=255,
                   border_w=2, outline_c=0x0000FF, outline_opa=255,
                   outline_w=1, shadow_c=0x000000, shadow_opa=128,
                   shadow_w=5, shadow_offset_x=2, shadow_offset_y= 2,
                   shadow_spread=0)
draw_image(img_src, x=0, y=0, rotation=0, scale_x=1.0, scale_y=1.0, skew_x=0, skew_y=0)

在指定坐标绘制图像。

参数:
  • img_src (str) – 图像的源(例如,文件路径或图像对象)。

  • x (int) – 绘制图像的x坐标。

  • y (int) – 绘制图像的y坐标。

  • rotation (int) – 图像的旋转角度,单位为度。

  • scale_x (float) – 图像的水平缩放系数。

  • scale_y (float) – 图像的垂直缩放系数。

  • skew_x (int) – 图像的水平倾斜角度(单位:度)。

  • skew_y (int) – 图像的垂直倾斜角度(单位:度)。

UiFlow2 代码块:

draw_image.png

MicroPython 代码块:

canvas_0.draw_image("path/to/image.png", x=10, y=20, rotation=0,
                    scale_x=1.0, scale_y=1.0, skew_x=0, skew_y=0)
draw_line(x1, y1, x2, y2, color=0, opa=lvgl.OPA.COVER, width=1)

从(x1, y1)到(x2, y2)绘制线条。

参数:
  • x1 (int) – 线条起点的x坐标。

  • y1 (int) – 线条起点的y坐标。

  • x2 (int) – 线条终点的x坐标。

  • y2 (int) – 线条终点的y坐标。

  • color (int) – 线条颜色,使用十六进制格式(例如 0xRRGGBB)。

  • opa (int) – 线条的不透明度(0-255)。

  • width (int) – 线条宽度。

UiFlow2 代码块:

draw_line.png

MicroPython 代码块:

canvas_0.draw_line(10, 10, 100, 100, color=0xFF0000, opa=255, width=2)
draw_label(txt, x=0, y=0, font=lvgl.font_montserrat_14, color=0, opa=lvgl.OPA.COVER)

在给定坐标处绘制具有指定文本的标签。

参数:
  • txt (str) – 要显示的文本。

  • x (int) – 绘制标签的x坐标。

  • y (int) – 绘制标签的y坐标。

  • font – 用于标签的字体(默认为lv.font_montserrat_14)。

  • color (int) – 文本颜色的十六进制格式(例如 0xRRGGBB)。

  • opa (int) – 文本的不透明度(0-255)。

UiFlow2 代码块:

draw_label.png

MicroPython 代码块:

canvas_0.draw_label("Hello, World!", x=10, y=20, font=lv.font_montserrat_14,
                    color=0xFFFFFF, opa=255)
draw_triangle(x1, y1, x2, y2, x3, y3, bg_c=16777215, bg_opa=lvgl.OPA.COVER)

绘制具有指定顶点的三角形。

参数:
  • x1 (int) – 第一个顶点的x坐标。

  • y1 (int) – 第一个顶点的y坐标。

  • x2 (int) – 第二个顶点的x坐标。

  • y2 (int) – 第二个顶点的y坐标。

  • x3 (int) – 第三个顶点的 x 坐标。

  • y3 (int) – 第三个顶点的 y 坐标。

  • bg_c (int) – 三角形的背景颜色(十六进制格式,例如 0xRRGGBB)。

  • bg_opa (int) – 三角形的不透明度(0-255)。

UiFlow2 代码块:

draw_triangle.png

MicroPython 代码块:

canvas_0.draw_triangle(10, 10, 50, 10, 30, 40, bg_c=0xFF0000, bg_opa=255)