【问题标题】:Setting property value at kv file doesn't affect the value of same variable at py simple code在 kv 文件中设置属性值不会影响 py 简单代码中相同变量的值
【发布时间】:2018-01-26 08:03:04
【问题描述】:

通过在 kv 文件中实例化自定义 GridLayout,我为 mes 属性设置了一个整数值。该值不会传递给 python 类变量。我已经声明了与 NumericProperty 相同的属性,但是当我运行代码时,打印语句显示的是在 py 文件中设置的默认值,而不是在 kv 文件中设置的值。我不明白为什么会这样。

main.py

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.properties import NumericProperty

class FichaSemApp(App):
    pass

class ShowCal(GridLayout):
    mes = NumericProperty()
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
        print('VALUE OF mes: ',self.mes)

FichaSemApp().run()

我正在使用 init 方法,因为我需要一些计算来填充网格。

fichasem.kv

ShowCal:
    mes: 2
    cols: 7
    rows: 7

【问题讨论】:

  • 你为什么不在你的 init 方法中设置 mes? self.mes =2可以打印self.cols或者self.rows吗?
  • 我想在大多数情况下使用 kv lang。使用 init 方法是一个丑陋的解决方法

标签: python properties kivy kivy-language


【解决方案1】:

您可能需要执行以下操作:

程序

import kivy
kivy.require('1.10.0')

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.properties import NumericProperty


class ShowCal(GridLayout):
    mes = NumericProperty()

    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        print('VALUE OF mes: ', self.mes)


class FichaSemApp(App):
    def build(self):
        return ShowCal()


if __name__ == '__main__':
    FichaSemApp().run()

基维文件

#:kivy 1.10.0

<ShowCal>:
    mes: 2
    cols: 7
    rows: 7

输出

【讨论】:

  • 这就是我要找的。我的 ShowCal 小部件必须是根?我的代码中缺少什么?
  • 在此示例中,您的 ShowCal 小部件实例是小部件树的根。缺少的东西是 (1) 在 main.py 或 fichasem.kv 中的 Kivy 版本 (2) 没有实现 build() 方法来返回一个 Widget 实例(你的小部件树的根) (3) kv 文件 - 一个类规则,由““之间的小部件类的名称声明,后跟“:”,定义该类的任何实例将如何以图形方式表示,例如:
猜你喜欢
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 2016-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多