用kivy语言设置变量

时间:2014-05-11 11:01:19

标签: python kivy nameerror

我试图将矩形的绿色设置为等于kivy中矩形的红色。

以下是我的尝试:

<Road>:
    id:label
    canvas:
        Color:
            r: random.randint(11,14)*0.04
            g: r
            b:random.randint(14,15)*0.04
            a:1

        Rectangle:
            pos: self.pos
            size: self.size

在此之后,我收到错误:

 NameError: name 'r' is not defined

我尝试过使用kivy.properties,但它们似乎只保持不变,我必须多次调用这个小部件(每个都有不同的颜色)。

1 个答案:

答案 0 :(得分:2)

以下是通过创建和使用Road的属性来实现此目的的方法。

<Road>:
    id:label
    random_colours: [random.randint(11,14)*0.04, random.randint(14,15)*0.4]
    canvas:
        Color:
            r: root.random_colours[0]
            g: root.random_colours[0]
            b: root.random_colours[1]
            a: 1

        Rectangle:
            pos: self.pos
            size: self.size

在使用像这样的顶点指令时,你可能会发现这样的东西最方便,因为在kv中你不能轻易引用它们的其他属性,但你可以轻松使用小部件属性。

编辑:当你发表评论时,这并不是很有效。问题似乎是动态属性创建发生得太晚,因此当Color尝试访问它时它不存在。这可能是一个错误。

您可以使用Road的正常定义以正常方式声明属性来修复它:

class Road(Widget):
    random_colours = ListProperty([0.1, 0.1])

设置为默认值并不重要,因为kv定义仍会覆盖它,矩形将适当更新。

你现在总是得到相同的颜色(几乎),因为kivy的rgba取0-1范围内的值,但这很容易修复。