2017-08-17 51 views
0

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

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 
+0

为什么你不在你的init方法中设置mes? 'self.mes = 2'你可以打印self.cols或self.rows? – PalimPalim

+0

我想在大多数情况下使用kv lang。使用__init__方法是一个丑陋的解决方法 –

回答

0

您可能要做到以下几点:

计划

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文件

#:kivy 1.10.0 

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

输出

enter image description here

+0

这就是我正在寻找的。我的ShowCal小部件必须是根?我的代码中缺少什么? –

+0

在此示例中,您的ShowCal小部件实例是小部件树的根。缺少的东西是(1)在main.py或fichasem.kv中的Kivy版本(2)没有实现build()方法来返回一个Widget实例(你的Widget树的根)(3)kv文件 - 类规则,由“<" ">”之后的“:”之间的部件类的名称声明,定义该类的任何实例将如何用图形表示,例如: – ikolim