Builder¶
用于注册和应用特定控件规则的类。
- kivy.lang.builder.Builder: BuilderBase = <kivy.lang.builder.BuilderBase object>¶
BuilderBase的主实例。
- class kivy.lang.builder.BuilderBase[源代码]¶
基类:
objectBuilder 负责创建一个
Parser来解析 kv 文件,并将解析结果合并到其内部规则、模板等中。默认情况下,
Builder是 Kivy 中用于小部件的全局实例,除了默认的 kv 文件外,您还可以使用它来加载其他 kv 文件。- apply(widget, ignored_consts={}, rule_children=None, dispatch_kv_post=False)[源代码]¶
搜索所有匹配该控件的规则并应用它们。
- 参数:
- widget:
Widget 应将该类的规则应用于此widget的widget。
- ignored_consts:集合
一个集合或列表类型,其元素是属性名,对于这些属性,该部件的常量KV规则(即不创建绑定的规则)将不会被应用。这允许例如跳过那些覆盖在Python中初始化的值的常量规则。
- rule_children:列表
如果不是
None,它应当是一个列表,该列表将被填充为所有由正在应用的 kv 规则所创建的控件。在 1.11.0 版本发生变更.
- dispatch_kv_post: bool
通常,Widget 类会在 kv 规则应用期间创建的组件上分发 on_kv_post 事件。但如果通过调用
apply()手动应用规则,这可能不会发生,因此如果此值为 True,我们将在将规则应用到 widget 后,在需要的地方分发 on_kv_post 事件(但不会为 widget 本身分发该事件)。默认为 False。
在 1.11.0 版本发生变更.
- widget:
- apply_rules(widget, rule_name, ignored_consts={}, rule_children=None, dispatch_kv_post=False)[源代码]¶
搜索所有匹配名称 rule_name 的规则,并将它们应用到 widget 上。
在 1.10.0 版本加入.
- 参数:
- widget:
Widget 匹配规则应应用于的控件。
- ignored_consts:集合
一个集合或列表类型,其元素是属性名,对于这些属性,该部件的常量KV规则(即不创建绑定的规则)将不会被应用。这允许例如跳过那些覆盖在Python中初始化的值的常量规则。
- rule_children:列表
如果不是
None,它应当是一个列表,该列表将被填充为所有由正在应用的 kv 规则所创建的控件。在 1.11.0 版本发生变更.
- dispatch_kv_post: bool
通常,Widget 类会在 kv 规则应用期间创建的组件上分发 on_kv_post 事件。但如果通过调用
apply()手动应用规则,这可能不会发生,因此如果此值为 True,我们将在将规则应用到 widget 后,在需要的地方分发 on_kv_post 事件(但不会为 widget 本身分发该事件)。默认为 False。
在 1.11.0 版本发生变更.
- widget:
- classmethod create_from(builder)[源代码]¶
创建该类的一个实例,并初始化为``builder``所指定的状态。
- 参数:
builder -- 用于初始化的构建器。
- 返回:
该类的一个新实例。
- load_file(filename, encoding='utf8', **kwargs)[源代码]¶
将文件插入语言构建器中,并返回该kv文件的根组件(如果已定义)。
- 参数:
- rulesonly:布尔值,默认为 False
如果为 True,当定义中包含根控件时,Builder 将抛出异常。
encoding:文件字符编码。默认为 utf-8。
- load_string(string, **kwargs)[源代码]¶
将字符串插入语言构建器,并返回该kv字符串的根部件(如果已定义)。
- 参数:
- rulesonly:布尔值,默认为 False
如果为 True,当定义中包含根控件时,Builder 将抛出异常。
- filename:字符串,默认为 None
如果指定,则使用该文件名来索引 kv 规则。
filename 参数可用于卸载 kv 字符串,方式与卸载 kv 文件相同。这可以通过使用伪文件名来实现,例如:
Build.load_string(""" <MyRule>: Label: text="Hello" """, filename="myrule.kv")
可以通过以下方式卸载:
Build.unload_file("myrule.kv")
- template(*args, **ctx)[源代码]¶
使用特定上下文创建专用模板。
在 1.0.5 版本加入.
使用模板,你可以通过为自定义控件提供上下文,从kv语言定义中构建它们。请参阅:ref:模板使用 <template_usage>。
- unbind_property(widget, name)[源代码]¶
解除由该组件中所有设置了该名称的规则所创建的事件处理器绑定。
这有效地清除了所有采用以下形式的widget规则::
name: rule
例如:
>>> w = Builder.load_string(''' ... Widget: ... height: self.width / 2. if self.disabled else self.width ... x: self.y + 50 ... ''') >>> w.size [100, 100] >>> w.pos [50, 0] >>> w.width = 500 >>> w.size [500, 500] >>> Builder.unbind_property(w, 'height') >>> w.width = 222 >>> w.size [222, 500] >>> w.y = 500 >>> w.pos [550, 500]
在 1.9.1 版本加入.
- unbind_widget(uid)[源代码]¶
解除由KV规则为该控件创建的所有处理器。此处传入的是
kivy.uix.widget.Widget.uid而非控件本身,因为Builder在控件析构函数中使用了它。这会有效地清除与该控件关联的所有KV规则。例如:
>>> w = Builder.load_string(''' ... Widget: ... height: self.width / 2. if self.disabled else self.width ... x: self.y + 50 ... ''') >>> w.size [100, 100] >>> w.pos [50, 0] >>> w.width = 500 >>> w.size [500, 500] >>> Builder.unbind_widget(w.uid) >>> w.width = 222 >>> w.y = 500 >>> w.size [222, 500] >>> w.pos [50, 500]
在 1.7.2 版本加入.
- exception kivy.lang.builder.BuilderException(context, line, message, cause=None)[源代码]¶
-
当Builder无法在控件上应用规则时引发的异常。
- class kivy.lang.builder.Observable¶
-
Observable是一个存根类,定义了绑定所需的方法。EventDispatcher是实现绑定接口的类的一个示例。详见EventDispatcher。在 1.9.0 版本加入.
- bind(self, **kwargs)¶
- fbind(self, name, func, *largs, **kwargs)¶
参见
EventDispatcher.fbind()。备注
为了保持与之前可能继承自
Observable的派生类的向后兼容性,添加了fbind()方法。fbind()的默认实现是创建一个部分函数,并将其传递给 bind,同时保存 uid 和 largs/kwargs。然而,funbind`(以及 :meth:`unbind_uid())效率较低,因为我们必须首先使用 largs/kwargs 或 uid 查找这个部分函数,然后对返回的函数调用unbind()。建议在派生类中重写这些方法,直接进行绑定以获得更好的性能。与
EventDispatcher.fbind()类似,此方法在失败时返回 0,在成功时返回一个正数的唯一 uid。该 uid 可用于unbind_uid()。
- unbind(self, **kwargs)¶