Kivy (MD) - 在分离 Kivy classes 时如何访问 class 属性?
Kivy (MD) - How do you access class properties when you separate the Kivy classes?
抱歉,如果我混淆了我的术语。我把这个例子放在一起来说明我的问题。我想访问标签的文本 属性,我将其放入 LabelOne class。使用 .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 class 分开,然后这样写:
<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 知识导致了这个问题。非常感谢您!!
kivy 中没有任何东西 self.parent1.parent2.
可以使用 parent.parent..... 直到你找到所需的小部件
这种情况的最佳解决方案是将 LabelOne
的 id 放在根小部件中,您可以将所有其他 LabelOne
属性放在 LabelOne class 像这样
<LabelOne>:
text: 'test'
halign: 'center'
LayoutEx:
id: layout_ex
LabelOne:
id: label_one
然后您可以使用 kv 文件中的 python app.root.label_one
和 MainApp
class 中的 python self.root.ids.label_one
访问任何 LabelOne 属性
你可以找到很多解决方案,但这是最好的
抱歉,如果我混淆了我的术语。我把这个例子放在一起来说明我的问题。我想访问标签的文本 属性,我将其放入 LabelOne class。使用 .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 class 分开,然后这样写:
<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 知识导致了这个问题。非常感谢您!!
kivy 中没有任何东西
self.parent1.parent2.
可以使用 parent.parent..... 直到你找到所需的小部件这种情况的最佳解决方案是将
LabelOne
的 id 放在根小部件中,您可以将所有其他LabelOne
属性放在 LabelOne class 像这样
<LabelOne>:
text: 'test'
halign: 'center'
LayoutEx:
id: layout_ex
LabelOne:
id: label_one
然后您可以使用 kv 文件中的 python app.root.label_one
和 MainApp
class 中的 python self.root.ids.label_one
访问任何 LabelOne 属性
你可以找到很多解决方案,但这是最好的