说明行为的说明

时间:2016-02-01 13:53:52

标签: python kivy with-statement

我是Python的新手,我没有得到Kivy指令所使用的魔力。例如,按照文档,我以这种方式开发了我的(天真)布局颜色背景扩展

class BoxLayoutColor(BoxLayout) :
    def __init__(self, color = (0,0,0,1), **kwargs):
        super(BoxLayoutColor, self).__init__(**kwargs)
        with self.canvas.before:
            (r,g,b,a) = color
            Color(r,g,b,a)
            self.rect = Rectangle(size=self.size, pos=self.pos)
            self.bind(size=self._update_rect, pos=self._update_rect)
    def _update_rect(self, instance, value):
        self.rect.pos = instance.pos
        self.rect.size = instance.size

它似乎工作,但我想知道构造函数Color()(因为它是构造函数,我对吗?)确实如何影响上下文。我必须从Python文档中找到关于with语句的隐含内容......

此外,还有一种方法可以将该功能分组以便重复用于其他布局吗?

1 个答案:

答案 0 :(得分:3)

with语句是一种通用的python语法,它调用传递它的对象的一些特殊方法(在本例中为self.canvas.before)。当发生这种情况时,kivy的canvas会在某处设置一个全局变量,并在with语句结束时取消它。当实例化指令时,它们检查是否定义了这个变量,如果是,那么自动将它们自己添加到给定的画布。

  

此外,还有一种方法可以将该功能分组以便重复用于其他布局吗?

Kivy不支持任何窗口小部件操作的这种语法,尽管添加它可能并不困难。大多数情况下,我们使用kv语言,这也有其他优点。