python - 在 add_widget 方法中访问小部件属性
问题描述
我想制作一组自定义的小部件,其中一些我想访问方法内的add_widget(widget, index, canvas)
特定小部件的属性。
问题是属性总是空的。这可能是因为我提前访问了它们,但我该如何解决呢?
我的代码:
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivymd.uix.label import MDLabel
from kivymd.app import MDApp
class CustomWidget(BoxLayout):
def add_widget(self, widget, index=0, canvas=None):
if isinstance(widget, MDLabel):
# Why is the text empty?
# Also how can I get the text value?
print("{}'s text is: {}".format(widget, widget.text))
else:
super(CustomWidget, self).add_widget(widget, index, canvas)
class MainApp(MDApp):
def __init__(self, **kwargs):
super(MainApp, self).__init__(**kwargs)
self.kv = Builder.load_string('''
#:kivy 2.0.0
CustomWidget:
MDLabel:
text: "Some text"
''')
def build(self):
return self.kv
if __name__ == '__main__':
MainApp().run()
解决方案
该文本是空的,因为它在添加到父级时尚未设置。
如果您关心它的值更改为什么,您可以绑定到新的子小部件的text
属性,add_widget
以便在它发生更改时通知您并采取相应的行动。
推荐阅读
- python - Python生成的文件未显示在工作目录中
- pine-script - 一组日本蜡烛在移动平均线交叉处的最小值,并用 Pinescript 绘制此图
- javascript - 如何在准备好的站点上添加反应钩子?
- ruby-on-rails - 如何强制 Bundler 为 mini-racer 获取正确的 libv8-node?
- java - JDK 17 spring boot 无法将 java.time.LocalDateTime 设为私有
- ruby - 您可能在 Ruby 解释器或扩展库中遇到了错误
- r - 在 R 中:尝试对称时出错,同时嵌套在 as.network 中
- asp.net - 对象引用未设置为单元测试中的对象实例
- python - 字典、嵌套值对菜单进行切片和切块
- c# - 在资源管理器中查看文件时,文件的最后更改日期将重置为当前日期时间