在kivy语言中设置变量
我想把一个矩形的绿色设置成另一个矩形的红色,这个是在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 个回答
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尝试访问它时,它并不存在。这可能是个bug。
你可以通过在Road的正常定义中以常规方式声明这个属性来修复它:
class Road(Widget):
random_colours = ListProperty([0.1, 0.1])
你设置的默认值其实没关系,因为kv定义仍然会覆盖它,矩形会相应地更新。
目前你总是会得到几乎相同的颜色,因为kivy的rgba值在0到1的范围内,但这个问题很容易解决。