如何将模板颜色设置为 canvas 的 kivy UI?

How to set a template color to a canvas of a kivy UI?

我喜欢定义一个颜色模板,用来绘制多个GUI组的背景。

我的 kivy kv 代码是这样的:

<BGRcolor@Color>:
    rgb: 0.176, 0.176, 0.176

<myParamBox@BoxLayout>:
    canvas:
        BGRcolor:

        Rectangle:
            pos: root.pos
            size: root.size
        Color:
            rgb: 0.3, 0.3, 0.3
        Line:
            points: root.pos[0],root.pos[1], root.pos[0] + root.size[0],root.pos[1], root.pos[0] + root.size[0],root.pos[1] + root.size[1], root.pos[0] ,root.pos[1] + root.size[1], root.pos[0],root.pos[1]
    padding: 2

canvas 操作的颜色设置无效。有什么想法吗?

Color 不是Widget,所以不能这样构造。实际上并没有真正的语法可以使它更简洁,但是你可以,例如使所有您希望具有此颜色的小部件继承自另一个具有颜色规则的小部件。

我找到了可行的解决方案:

class myApp(kivy.app.App):

    BGcolor = (0.176, 0.176, 0.176, 1.0)

kivy.lang.Builder.load_string('''
<myParamBox@BoxLayout>:
    canvas:
        Color:
            rgb: app.BGcolor
        Rectangle:
            pos: root.pos
            size: root.size
        Color:
            rgb: 0.3, 0.3, 0.3
        Line:
            points: root.pos[0],root.pos[1], root.pos[0] + root.size[0],root.pos[1], root.pos[0] + root.size[0],root.pos[1] + root.size[1], root.pos[0] ,root.pos[1] + root.size[1], root.pos[0],root.pos[1]
    padding: 2
''')

在应用程序实例中定义颜色元组并在模板中引用它。