【问题标题】:Reuse custom Widget in Kivy app在 Kivy 应用程序中重用自定义小部件
【发布时间】:2015-02-21 13:51:20
【问题描述】:

我有一个简单的 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

【问题讨论】:

    标签: python frameworks widget kivy


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。我知道 Layout 类,但我没有在这里使用它们来保持代码简单和简短。无论如何,我知道在 big.kv 中复制相关的 kv 规则显然会显示 MyComposit。但是当我使用一个已经“定义”的小部件(他的 .kv 文件)时,没有办法继承 kv 规则?我真的必须随时复制我所有的 kv 代码吗?
    • @Carpo23 您还可以加载其他 kivy 文件。请参阅 kivy 文档中的 here。
    • Widgets没有kv文件,除了app类关联的单个kv文件外,没有隐式加载。您必须手动加载任何额外文件,或将其中包含的规则复制到已加载的文件中。
    猜你喜欢
    • 2014-05-12
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多