Builder

用于注册和应用特定控件规则的类。

kivy.lang.builder.Builder: BuilderBase = <kivy.lang.builder.BuilderBase object>

BuilderBase 的主实例。

class kivy.lang.builder.BuilderBase[源代码]

基类:object

Builder 负责创建一个 Parser 来解析 kv 文件,并将解析结果合并到其内部规则、模板等中。

默认情况下,Builder 是 Kivy 中用于小部件的全局实例,除了默认的 kv 文件外,您还可以使用它来加载其他 kv 文件。

apply(widget, ignored_consts={}, rule_children=None, dispatch_kv_post=False)[源代码]

搜索所有匹配该控件的规则并应用它们。

参数:
widgetWidget

应将该类的规则应用于此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 版本发生变更.

apply_rules(widget, rule_name, ignored_consts={}, rule_children=None, dispatch_kv_post=False)[源代码]

搜索所有匹配名称 rule_name 的规则,并将它们应用到 widget 上。

在 1.10.0 版本加入.

参数:
widgetWidget

匹配规则应应用于的控件。

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 版本发生变更.

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")
match(widget)[源代码]

返回与控件匹配的 ParserRule 对象列表。

match_rule_name(rule_name)[源代码]

返回与控件匹配的 ParserRule 对象列表。

sync()[源代码]

执行所有等待中的操作,例如执行所有与画布相关的表达式。

在 1.7.0 版本加入.

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 版本加入.

unload_file(filename)[源代码]

卸载所有与先前导入文件关联的规则。

在 1.0.8 版本加入.

警告

这不会移除当前小部件上已应用/使用的规则或模板。它只会影响下一个小部件的创建或模板调用。

exception kivy.lang.builder.BuilderException(context, line, message, cause=None)[源代码]

基类:ParserException

当Builder无法在控件上应用规则时引发的异常。

class kivy.lang.builder.Observable

基类:ObjectWithUid

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()

funbind(self, name, func, *largs, **kwargs)

参见 fbind()EventDispatcher.funbind()

unbind(self, **kwargs)
unbind_uid(self, name, uid)

参见 fbind()EventDispatcher.unbind_uid()