ConfigParserProperty 在 class kivy 中返回 val
ConfigParserProperty returning val inside class kivy
我正在关注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,即 returns 0 而不是存储在配置文件中的数字,我该如何解决这个问题,所以如果我添加更多构建函数中的计算小部件它会正确知道数字吗?
任何帮助将不胜感激!
谢谢!
ConfigParserProperty 设置构建后发生的事情,所以遗憾的是你不能依赖配置中可用的值 build
甚至 on_start
之后它会尽快更新,但以前没有发生过。
所以你有两个选择,要么将你的操作延迟固定的时间(使用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()
我正在关注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,即 returns 0 而不是存储在配置文件中的数字,我该如何解决这个问题,所以如果我添加更多构建函数中的计算小部件它会正确知道数字吗?
任何帮助将不胜感激! 谢谢!
ConfigParserProperty 设置构建后发生的事情,所以遗憾的是你不能依赖配置中可用的值 build
甚至 on_start
之后它会尽快更新,但以前没有发生过。
所以你有两个选择,要么将你的操作延迟固定的时间(使用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()