我试图将矩形的绿色设置为等于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,但它们似乎只保持不变,我必须多次调用这个小部件(每个都有不同的颜色)。
答案 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范围内的值,但这很容易修复。