M5Canvas
M5Canvas是一个强大的图形控件,提供可绘制的表面,用于在用户界面中创建自定义图形、动画和视觉效果。它支持绘图操作、图像管理和高级图形渲染。
UiFlow2 应用示例
绘制基本形状
在UiFlow2中打开 cores3_canvas_basic_example.m5f2 项目。
此示例演示如何创建画布并绘制矩形、圆形和线条等基本图形。
UiFlow2 代码块:
示例输出:
包含各种彩色图形的画布,包括矩形、圆形和线条。
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创建用于绘图的画布控件。
- 参数:
- set_flag(flag, value)
为对象设置标志。如果
value为True,则添加标志;如果为False,则移除标志。UiFlow2 代码块:

MicroPython 代码块:
canvas_0.set_flag(lv.obj.FLAG.HIDDEN, True)
- toggle_flag(flag)
切换对象上的标志。如果标志已设置,则移除它;如果未设置,则添加它。
- 参数:
flag (int) – 要切换的标志。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.toggle_flag(lv.obj.FLAG.HIDDEN)
- set_pos(x, y)
设置画布的位置。
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.set_pos(100, 100)
- set_x(x)
设置画布的x坐标。
- 参数:
x (int) – 画布的x坐标。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.set_x(100)
- set_y(y)
设置画布的y坐标。
- 参数:
y (int) – 画布的y坐标。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.set_y(100)
- align_to(obj, align, x, y)
将画布对齐到另一个对象。
- 参数:
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.align_to(page_0, lv.ALIGN.CENTER, 0, 0)
- set_size(width, height)
设置画布的尺寸。
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.set_size(200, 100)
- set_width(width)
设置画布的宽度。
- 参数:
width (int) – 画布的宽度。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.set_width(200)
- set_height(height)
设置画布的高度。
- 参数:
height (int) – 画布的高度。
- 返回:
None
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.set_height(100)
- get_width()
获取画布的宽度。
- 返回:
画布的宽度。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
width = canvas_0.get_width()
- get_height()
获取画布的高度。
- 返回:
画布的高度。
- 返回类型:
UiFlow2 代码块:

MicroPython 代码块:
height = canvas_0.get_height()
- fill_bg(color, opa)
用指定的颜色和不透明度填充画布背景。
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.fill_bg(0x001122, 255)
- set_px(x, y, color, opa)
在(x, y)位置设置具有指定颜色和不透明度的像素。
- 参数:
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.set_px(100, 100, 0xFF0000, 255)
- get_px_color(x, y)
获取(x, y)位置像素的颜色。
UiFlow2 代码块:

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)位置像素的不透明度。
UiFlow2 代码块:

MicroPython 代码块:
- draw_arc(x, y, r, color=0, opa=lvgl.OPA.COVER, width=1, start_angle=0, end_angle=90)
在画布上绘制弧形。
- 参数:
UiFlow2 代码块:

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 代码块:

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)
在指定坐标绘制图像。
- 参数:
UiFlow2 代码块:

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)绘制线条。
- 参数:
UiFlow2 代码块:

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)
在给定坐标处绘制具有指定文本的标签。
- 参数:
UiFlow2 代码块:

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)
绘制具有指定顶点的三角形。
- 参数:
UiFlow2 代码块:

MicroPython 代码块:
canvas_0.draw_triangle(10, 10, 50, 10, 30, 40, bg_c=0xFF0000, bg_opa=255)
