【发布时间】:2018-11-26 06:42:57
【问题描述】:
如何覆盖 Kivy 小部件子部件的默认值?即
MyWidget.label是“默认”,但我想将其更改为例如'紫龟'当MyRootWidget的孩子?-
我可以像在
MyRootWidget.__init__()中那样访问children 的children,但这似乎很麻烦,尤其是对于一棵深树...有没有更优雅的方法?
我一直在查看 Kivy lang 和 Widget 页面,但无法理解是否存在解决方案。我在 SO 页面中还没有看到这个问题(尽管在我搜索时确实回答了一个不同的问题)。
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty, StringProperty
root = Builder.load_string('''
<MyWidget@BoxLayout>:
orientation: 'vertical'
Label:
id: label
text: 'DEFAULT'
<MyRootWidget@BoxLayout>:
id: root_widget
MyWidget:
id: w1
# (---1---)
''')
class MyRootWidget(BoxLayout):
w1 = ObjectProperty()
def __init__(self, **kwargs):
super().__init__(**kwargs)
print(self.ids.w1.ids.label.text) # (---2---)
class MainApp(App):
def build(self):
return MyRootWidget()
if __name__ == '__main__':
MainApp().run()
【问题讨论】:
标签: python python-3.x widget kivy kivy-language