【问题标题】:ConfigParserProperty returning val inside class kivyConfigParserProperty 在 kivy 类中返回 val
【发布时间】:2020-10-04 21:40:37
【问题描述】:

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

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

【问题讨论】:

    标签: python oop kivy kivy-language configparser


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2016-12-01
      • 2011-09-10
      • 2017-10-08
      • 1970-01-01
      相关资源
      最近更新 更多