【发布时间】:2018-08-04 22:12:49
【问题描述】:
我在让 Kivy 实例化子小部件时遇到问题。我认为这里的问题是我如何设置根小部件。根据我看到的许多示例,包括 kivy 自己的 documentation,我应该能够将子小部件实例化为 .kv 文件中的根小部件,而无需像这样使用 :
initApp.kv root_rule:
Root_Widget:
Test_Screen:
<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_widget(Test_Screen()) 行或
- 将 添加到 .kv 文件中的 Root_Widget 周围,使其成为类规则:
initApp.kv 类规则:
<Root_Widget>:
Test_Screen:
<Test_Screen>:
BoxLayout:
*there is stuff here, leaving blank to keep this question shorter*
问题
我的问题是,这里有什么区别?在 .kv 文件中的 Root_Widget 下嵌套 Test_Screen 应该与调用 add_widget() 方法完全相同,对吗?这是真的吗?如果是这样,在将 Root_Widget 设置为类规则 VS 时如何/为什么会有所不同。根规则?
说 Root_Widget 是类规则而不是根规则是否会产生不可预见的后果?使用这种方法似乎可以正常工作,但我不知道随着应用程序变得更加复杂,它是否会引起其他麻烦。
【问题讨论】: