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 而不是存储在配置文件中的数字,我该如何解决这个问题,所以如果我在构建函数中添加更多计算小部件,它将正确地知道数字?


任何帮助将不胜感激!谢谢!


九州编程
浏览 79回答 1
1回答

跃然一笑

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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python