2021-08-15 16:57:20 +08:00
|
|
|
|
# 构件数据格式说明
|
|
|
|
|
一个构件数据格式必须是一个符合python的字典数据类型,需要至少包含以下属性
|
|
|
|
|
|
|
|
|
|
## id
|
|
|
|
|
定义一个构件的名称,含有此属性的构件为命名构件,命名构件可以通过Blocks.getWidgetById获得。
|
|
|
|
|
名称规则:名称由字母数字构成,理论上可以包含汉字,绝对不能包含”."(英文句号)
|
|
|
|
|
|
|
|
|
|
## widgettype
|
|
|
|
|
定义构件的名称,大部分常用的kivy的widget的类名都可以用,以及kivyblocks扩展的部件
|
|
|
|
|
|
|
|
|
|
## options
|
|
|
|
|
类构建时的参数,字典数据类型
|
|
|
|
|
|
|
|
|
|
## subwidgets
|
|
|
|
|
子构件数组,数组中的每个元素也必须是一个符合构件数据格式要求的数据字典,用于定义一个子构件。
|
|
|
|
|
|
|
|
|
|
## binds
|
|
|
|
|
构件的事件绑定列表,每个构件(和其命名子构件)的任和事件都可以绑定一道多个处理,详细事件绑定请看[事件绑定](./binds.md)
|
|
|
|
|
|
|
|
|
|
## 其他属性
|
|
|
|
|
非上述属性的其他的字典属性,blocks会试图用此属性值来创建构件,如果成功,则将此构件在当前构件中保存为此属性名称,并可用使用属性名称当变量来调用 Blocks.getWidgetById()函数来获取
|
|
|
|
|
|
|
|
|
|
## 例子
|
|
|
|
|
|
|
|
|
|
### HELLO
|
|
|
|
|
```
|
|
|
|
|
{
|
|
|
|
|
"widgettype":"VBox",
|
|
|
|
|
"options":{},
|
|
|
|
|
"subwidgets":[
|
|
|
|
|
{
|
|
|
|
|
"widgettype":"Title1",
|
|
|
|
|
"options":{
|
|
|
|
|
"text":"Say Hello",
|
|
|
|
|
"i18n":True,
|
|
|
|
|
"size_hint_y":None,
|
|
|
|
|
"height":"py::CSize(2)"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"widgettype":"Text",
|
|
|
|
|
"options":{
|
|
|
|
|
"text":"Hello KivyBlocks"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
##### 说明
|
|
|
|
|
创建一个VBox类型的构件,VBox创建一个子构件垂直排列的容器,子构件按照顺序从上而下排列,在这个例子中,本VBox容器中放了两个子构件,一个是“title1”的标题1构件,另一个是Text构件,VBox不带参数是表示占满父构件的全部空间。
|
|
|
|
|
|
|
|
|
|
##### 显示效果
|
|
|
|
|
[Hello](../imgs/hello_window.png)
|
|
|
|
|
|
|
|
|
|
### 服务器来的构件字典数据
|
|
|
|
|
```
|
|
|
|
|
{
|
|
|
|
|
"widgettype":"urlwidget",
|
|
|
|
|
"options":{
|
|
|
|
|
"params":{},
|
|
|
|
|
"url":"{{entire_url('ctrl.ui')}}"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
#### 说明
|
|
|
|
|
urlwidget的一个特殊的构件类型
|