如何在 python kivy 文件中制作我的自定义小部件,并通过更改其大小、位置和颜色来多次使用它?

How do I make my custom widget in python kivy file and use it multiple times by changing its size, pos and color?

此代码无效,请指正并指导我如何制作它。

-.py文件

class RLB(Widget):
    pass

class Bars(Widget):
        pass

class FGHApp(App):
    pass

FGHApp().run()

-FGH.kv 文件

我在这里想要制作名为 'RLB' 的自定义小部件,我希望它像按钮、标签等任何其他内置小部件一样多次使用它

#My custom widget
Bars:

<RLB>:
    canvas:
        Color:
            rgba:self.color
        RoundedRectangle:
            pos:self.pos
            size:self.size
            radius: [10]
<Bars>:
    FloatLayout:
        size:root.size
        RLB:
            #Error
            color:(1,0,1,1)
            pos:(100,100)
            size:(200,200)
        RLB:
            #Error
            color:(1,0,0,0.5)
            pos:(300,300)
            size:(200,200)

您应该定义稍后要更改的 属性

class RLB(Widget):
    # you can give an initial value white for example 
    # You don't need to add pos and size properties, since Widget already has those proprties.
    color=ListProperty([1,1,1,1])


然后你应该参考这个属性是kv文件


<RLB>:
   # use root instead of self
    canvas:
        Color:
            rgba:root.color
        RoundedRectangle:
            pos:root.pos
            size:root.size
            radius: [10]

你也可以使用 here 中的任何 kivy 属性 有很多

终于我自己完成了:) 1st 我们必须制作一个小部件 class 并在其上添加所有说明,如颜色、大小、..这是因为我们无法编辑小部件 class 所以我们创建了小部件 [=23= 的副本] 通过继承

<Wp@Widget>:
    size_hint:None,None
    size:(dp(100),dp(100))
    pos:(0,0)
    color:(1,1,1,1)

现在 Wp 是我们的新小部件,它拥有所有需要的东西,之后我们必须制作我们自己的小部件,它继承自这个 'Wp' class.

<RLB@Wp>:
    canvas:
        Color:
            rgba:root.color
        RoundedRectangle:
            pos:root.pos
            size:root.size
            radius: [dp(10),]

大功告成,现在我们可以通过更改颜色、大小和位置来多次使用它。

<Bars>:
    FloatLayout:
        size:root.size
        RLB:
            color:(1,1,0,1)
            pos:(0,0)
            size:(100,100)
        RLB:
            color:(1,0,1,1)
            pos:(100,100)
            size:(100,100)

现在 .py 文件中不需要这个了

#not needed
class RBL(Widget):
    pass