【发布时间】:2021-10-25 21:56:02
【问题描述】:
如果我的术语混淆了,我们深表歉意。我把这个例子放在一起来说明我的问题。我想访问标签的文本属性,我把它放在 LabelOne 类中。使用 .py:
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.label.label import MDLabel
class LabelOne(MDLabel):
pass
class LayoutEx(MDBoxLayout):
pass
class MainApp(MDApp):
def build(self):
self.theme_cls.theme_style = 'Light'
self.theme_cls.primary_palette = 'Blue'
return Builder.load_file('figure_out_ids.kv')
def on_start(self):
self.root.ids.label_one.text = 'changed'
if __name__=='__main__':
MainApp().run()
我使用on_start 方法访问标签的文本属性。
现在,当我像这样构造我的 .kv 代码时:
LayoutEx:
id: layout_ex
LabelOne:
id: label_one
text: 'test'
halign: 'center'
on_start 方法完美运行,我能够在 python 中操作 label_one.text。
但是,我真正想做的是将 .kv 文件中的 LabelOne 类分开并这样写:
<LabelOne>:
id: label_one
text: 'test'
halign: 'center'
LayoutEx:
id: layout_ex
LabelOne:
并且仍然可以从MainApp on_start 方法调用标签,但这会给出:AttributeError: 'super' object has no attribute '__getattr__' 错误。现在环顾互联网,我知道我必须将self.root.ids.label_one.text = 'changed' 更改为self.parent1.parent2.ids.label_one.text 之类的东西,但我无法理解需要在parent1 和parent2 点中放置哪些变量。我整天都被困在这上面,我希望有人能帮助我理解这里的过程。我怀疑是我缺乏基本的 Python 知识导致了这个问题。提前非常感谢您!
【问题讨论】:
标签: python kivy kivy-language kivymd