如何解决ConfigParserProperty在类kivy中返回val
我正在遵循官方的kivy文档,但遇到了一个问题,这是我的代码,在底部,我将解释问题所在。
KV = '''
BoxLayout:
TextInput:
id: number
text: str(app.number)
on_text: app.number = self.text
Label:
id: info
number: number.text
text: 'Number: {}'.format(self.number)
'''
class InfoApp(App):
def build_config(self,config):
config.setdefaults(
'info',{
'number': ''
}
)
number = ConfigParserProperty(0,'info','number','app',val_type=int)
def build(self):
print(self.number)
return Builder.load_string(KV)
if __name__ == '__main__':
InfoApp().run()
程序可以运行,但是在构建函数中我打印出self.number,它返回0而不是存储在配置文件中的数字,我该如何解决这个问题,因此,如果我在构建函数中添加更多计算小部件,它将知道号码吗?
任何帮助将不胜感激! 谢谢!
解决方法
ConfigParserProperty设置会在构建后发生,因此可悲的是,您不能依赖build
中甚至on_start
中可用的config值,此后它会尽快更新,但是以前没有发生。
因此,您有两种选择,一种是将操作延迟一定的时间(使用Clock.schedule_once),另一种是在调用的函数中使用该值,或者(更好地)将一个函数绑定到您感兴趣的属性,因此每次值更改时都会调用它,无论如何都可能会调用该属性,因为您需要根据此值刷新界面。
KV = '''
BoxLayout:
TextInput:
id: number
text: str(app.number)
on_text: app.number = self.text
Label:
id: info
number: number.text
text: 'Number: {}'.format(self.number)
'''
class InfoApp(App):
def build_config(self,config):
config.setdefaults(
'info',{
'number': ''
}
)
number = ConfigParserProperty(0,'info','number','app',val_type=int)
def build(self):
self.bind(number=self.do_something)
return Builder.load_string(KV)
def do_something(self,*args):
print(self.number)
if __name__ == '__main__':
InfoApp().run()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。