我在让Kivy实例化子窗口小部件时遇到了问题。我认为这里的问题在于如何设置根小部件。根据我看到的许多例子,包括基维自己的
documentation
我应该能够将子窗口小部件实例化为.kv文件中的根窗口小部件,而无需像这样使用
initApp.kv根规则:
Root_Widget:
Test_Screen:
:
BoxLayout:
*there is stuff here, leaving blank to keep this question shorter*
Python文件:(注意add_widget()被注释掉)
class Test_Screen(Screen):
pass
class Root_Widget(ScreenManager):
def __init__(self, **kwargs):
super().__init__(**kwargs)
# self.add_widget(Test_Screen())
pass
class InitApp(App):
def build(self):
return Root_Widget()
if __name__ == '__main__':
InitApp().run()
然而,这只会导致一个空白的应用程序。有两种方法可以解决此问题:
取消注释
self.add_小部件(Test_Screen())
线路或
将
initApp.kv等级规则:
:
Test_Screen:
:
BoxLayout:
*there is stuff here, leaving blank to keep this question shorter*
问题
我的问题是,这里有什么不同?在.kv文件的根小部件下面嵌套Test_Screen应该与调用add_Widget()方法完全相同,对吗?这是真的吗?如果是这样的话,将根小部件设置为类规则与根规则有何不同?
如果说根小部件是一个类规则而不是根规则,是否会产生无法预料的后果?使用这种方法似乎效果不错,但我不知道随着应用程序变得越来越复杂,它是否会带来其他麻烦。