在Kivy中启动多个小部件

时间:2016-07-19 03:14:54

标签: python user-interface kivy

想象一下这是main.py:

class Widget1(Button):
    pass

class Widget2(ButtonBehavior, Image):
    pass

在.kv文件中:

<Widget1>:
    Button:

<Widget2>:
    Image:

如何在主文件中初始化Widget1Widget2?创建单独的App不起作用。

2 个答案:

答案 0 :(得分:1)

试试这个

class Widget1(Button)
    pass

class Widget2(ButtonBehavior, Image)
    pass

class MyMain(Widget):
    pass

class MyApp(App):
    def build(self):
        return MyMain()

MyApp().run()

并在你的kivy

<MyMain>:
    <Widget1>:
        Button:

    <Widget2>:
        Image:

答案 1 :(得分:0)

为什么要在继承的小部件中添加另一个ButtonImage?在我看来是这样的:

  

创建按钮→将另一个按钮放入该按钮小部件

你不想要那个。绝对不会在规则中创建规则 - 在python中几乎不相似:

def foo():
    def bar():
        ...
    ...

有用于此的用例,但这不是它。 :P另外,我没有看到像这样创造它的观点:

<MyMain>:
    <Widget1>:
        Button:

    <Widget2>:
        Image:

因为必须以这种方式将其与python文件连接(它需要一个类)。其他东西是<MyWidget@Button>:

但是,有一个更简单的方法,它不需要额外的(在这种情况下是空的)类:

from kivy.app import App
from kivy.uix.image import Image
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.behaviors import ButtonBehavior

class Widget1(Button):
    pass

class Widget2(ButtonBehavior, Image):
    pass

class MyApp(BoxLayout, App):
    def build(self):
        self.add_widget(Widget1())
        self.add_widget(Widget2())
        return self

MyApp().run()

这样您就不需要像占位符那样创建另一个类,如果您使用小的东西,这非常方便。我不确定在MyApp中继承订单,但它似乎适用于BoxLayout, AppApp, BoxLayout个案例。