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

Python 在Kivy应用程序中重用自定义小部件,python,frameworks,widget,kivy,Python,Frameworks,Widget,Kivy,我有一个简单的kivy应用程序,其kv文件如下所示,我想在另一个kivy应用程序中重用我的自定义小部件(包括他的外观)。这是要重用的小部件: class MyButton(Button): pass class MyComposit(Widget): button1 = ObjectProperty(None) lab = ObjectProperty(None) class MyApp(App): def build(self): comp = My

我有一个简单的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
big.kv文件:

#:kivy 1.0.9


<BigWidget>
    n: idcomp

    MyComposit:
        id: idcomp
#:kivy 1.0.9
n:idcomp
MyComposit:
id:idcomp

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


您可能还需要查看布局类,否则必须手动设置所有内容的位置和大小。

谢谢您的回复。我知道布局类,但我没有在这里使用它们来保持代码的简单和简短。无论如何,我知道在big.kv中复制相关的kv规则显然会显示MyComposit。但是,当我使用一个已经“定义”的小部件(使用他的.kv文件)时,没有办法继承kv规则吗?我真的需要随时复制我所有的kv代码吗?@Carpo23您还可以加载其他kivy文件。请参阅kivy文档中的内容。小部件没有kv文件,并且除了与应用程序类关联的单个kv文件外,没有隐式加载。您必须手动加载任何额外文件,或将其中包含的规则复制到已加载的文件中。
#:kivy 1.0.9


<BigWidget>
    n: idcomp

    MyComposit:
        id: idcomp