在Kivy中启动多个小部件



将其想象为main.py:

class Widget1(Button):
    pass
class Widget2(ButtonBehavior, Image):
    pass

在.kv文件中:

<Widget1>:
    Button:
<Widget2>:
    Image:

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

像这样尝试

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:

为什么要在继承的小部件中放入另一个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都有效。

相关内容

  • 没有找到相关文章