如何解决为什么我无法从 __init__ 访问 Kivy lang 属性?
我是 Python 初学者。 我喜欢了解 Kivy 和 Python 的概念。 我不明白为什么下面的代码会出错。
Python 文件
from kivy.app import App
from kivy.uix.button import Button
class MyButton(Button):
def __init__(self,**kwargs):
super(MyButton,self).__init__(**kwargs)
print(f"self.name is{self.name}") #it makes error.
def print_name(self):
print(self.name) #But it doesn't make error!!
class TestApp(App):
def __init__(self,**kwargs):
super(TestApp,self).__init__(**kwargs)
self.title = 'Test'
if __name__ == '__main__':
TestApp().run()
Kivy 文件
#:kivy 1.10.0
<MyButton>:
name: "MyButton"
on_press: self.print_name()
MyButton:
text: self.name
我认为 name 属性已经存在,因为它是作为 kivy 文件中的类属性创建的,因此 print_name 方法不会出错。
句子中哪里有错误? 如何在 init 方法中使用在 kivy-file 中创建的名称属性(属性)?
解决方法
您无法在 __init__()
方法中访问该属性,因为当时尚未创建或设置该属性。在您的 <MyButton>:
中评估 kv
规则时,将创建和设置该属性。您可以通过稍微延迟访问来访问 name
属性。例如,通过使用 Clock.schedule_once()
:
class MyButton(Button):
def __init__(self,**kwargs):
super(MyButton,self).__init__(**kwargs)
# print(f"self.name is{self.name}") # it makes error.
Clock.schedule_once(lambda dt: self.print_name())
def print_name(self):
print(self.name) # But it doesn't make error!!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。