将其想象为main.py:
class Widget1(Button):
pass
class Widget2(ButtonBehavior, Image):
pass
在.kv文件中:
<Widget1>:
Button:
<Widget2>:
Image:
如何在主文件中初始化Widget1
和Widget2
?创建单独的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:
为什么要在继承的小部件中放入另一个Button
和Image
?在我看来是这样的:
"创建"按钮→将另一个按钮放入该按钮小部件
你不想那样。而且绝对不会在规则中创建规则——这在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, App
和App, BoxLayout
都有效。