我是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语句的隐含内容......
此外,还有一种方法可以将该功能分组以便重复用于其他布局吗?
答案 0 :(得分:3)
with
语句是一种通用的python语法,它调用传递它的对象的一些特殊方法(在本例中为self.canvas.before
)。当发生这种情况时,kivy的canvas会在某处设置一个全局变量,并在with语句结束时取消它。当实例化指令时,它们检查是否定义了这个变量,如果是,那么自动将它们自己添加到给定的画布。
此外,还有一种方法可以将该功能分组以便重复用于其他布局吗?
Kivy不支持任何窗口小部件操作的这种语法,尽管添加它可能并不困难。大多数情况下,我们使用kv语言,这也有其他优点。