← 返回扩展市场

扩展制作教程

一句话:写一个 .py 文件,里面放 register() 函数,返回积木定义列表,就完事了。

最小示例

def register():
    return [{
        "btype": "hello",          # 积木唯一ID,不能和已有积木重名
        "cat": "扩展",             # 分类名,会出现在积木库的「扩展」分类里
        "label": "我的文字",        # 积木上显示的名字
        "props": [("text", "文字", "text")],  # 属性:(键名, 显示名, 类型)
        "slots": [],               # 子槽,空表示没有嵌套
        "defaults": {"text": "你好"},  # 属性默认值
        "html_template": "<div>{text}</div>",  # 生成的HTML,{text}会被属性值替换
    }]

积木定义字段

字段说明
btype积木唯一标识,字符串,不能重复
cat分类名,自定义分类会自动出现在积木库
label积木在面板上显示的文字
props属性列表,每项 (键名, 显示名, 类型),类型可选 text/number/color
slots子槽列表,每项 (槽名, 显示名, [允许的分类])
defaults属性默认值字典
html_template简单模板,用 {属性名} 插入值
generate高级:函数 lambda brick, indent, app: 返回HTML字符串,比模板更灵活
css可选,注入页面的CSS样式
js可选,注入页面的JavaScript代码

带样式和交互的示例

def register():
    return [{
        "btype": "clock",
        "cat": "扩展",
        "label": "实时时钟",
        "props": [],
        "slots": [],
        "defaults": {},
        "generate": lambda b, i, app: ("  " * i) + '<div class="my-clock"></div>',
        "css": ".my-clock{font-size:24px;color:blue;font-family:monospace;}",
        "js": "setInterval(function(){document.querySelector('.my-clock').textContent=new Date().toLocaleTimeString();},1000);",
    }]
测试方法:保存为 xxx.py → 打开 BrickHTML → 点「🧩 扩展」→「+ 自定义扩展」→ 导入本地 .py → 同意安全确认 → 积木库「扩展」分类里就能看到你的积木了。
注意:扩展以完全权限执行代码,发布到市场前请确保代码安全,不要包含删除文件、窃取数据等恶意操作。