为了账号安全,请及时绑定邮箱和手机立即绑定

ConfigParserProperty 在 kivy 类中返回 val

ConfigParserProperty 在 kivy 类中返回 val

九州编程 2023-10-06 16:44:34
我正在关注官方的 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 而不是存储在配置文件中的数字,我该如何解决这个问题,所以如果我在构建函数中添加更多计算小部件,它将正确地知道数字?任何帮助将不胜感激!谢谢!
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

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()


查看完整回答
反对 回复 2023-10-06
  • 1 回答
  • 0 关注
  • 78 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信