在 Kivy 应用程序中重用自定义小部件

Reuse custom Widget in Kivy app

我有一个简单的 kivy 应用程序,其 kv 文件如下所示,我想在另一个 kivy 应用程序中重用我的自定义小部件(包括他的外观)。这是要重用的小部件:

class MyButton(Button):
pass

class MyComposit(Widget):
    button1 = ObjectProperty(None)
    lab = ObjectProperty(None)

class MyApp(App):
    def build(self):
        comp = MyComposit()
        return comp

if __name__ == '__main__':
    MyApp().run()

my.kv 文件:

<MyButton>
    canvas:
        Rectangle:
           size: 30,30
           pos: self.pos

<MyComposit>
    size: 400,500
    button1: btn1
    lab: lb

    Label
        id: lb
        text: "label"
        pos: root.center_x,root.center_y

    MyButton:
       id: btn1
       text: "btn1"
       pos: root.x/3,200

为什么我在下面的应用程序中得到一个空白页面,没有显示我的小部件 MyComposit?

from my_composit import MyComposit

class BigWidget(Widget):
    n = ObjectProperty(None)

class BigApp(App):
    def build(self):
        b = BigWidget()
        return b

if __name__ == '__main__':
    BigApp().run()

big.kv 文件:

#:kivy 1.0.9


<BigWidget>
    n: idcomp

    MyComposit:
        id: idcomp

您的新应用不包含 MyComposit 小部件的 kv 规则,因此它可能工作正常但没有显示任何对您可见的内容。将相关的 kv 复制到 big.kv 以使其工作。

您可能还想查看布局 类,否则您将不得不手动设置所有内容的位置和大小。