在kivy中获取数字属性的值

时间:2014-04-08 08:52:30

标签: kivy

我正在尝试使用NumericProperty,但在尝试将其用作值时会出现Type错误

我的代码看起来像这样

from kivy.properties import NumericProperty
from kivy.uix.widget import Widget

class Segment(Widget):
def __init__(self, segments):
    super(Segment, self).__init__()
    self.segments = NumericPropery(segments)

def build(self):
for i in range(0, self.segments):
    # Do something

我收到错误:

for i in range(0, self.segments):
TypeError: range() integer end argument expected, got kivy.properties.NumericProperty.

所以我尝试使用self.segments.get()代替,但后来我遇到了这个错误

TypeError: get() takes exactly one argument (0 given)

表示get函数需要<kivy._event.EventDispatcher>对象参数

知道怎么解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您必须在类级别声明属性。

class Segment(Widget):
    segments = NumericProperty()

这将给出正确的行为。问题是属性自己管理每个实例的值并与eventloop等进行交互。如果你不在课堂级别声明它们,他们就不能这样做,所以你的函数只是看看NumericProperty本身(这是你的问题)。

答案 1 :(得分:2)

这段代码我也遇到类似的问题...

class GameModel(object):
    some_number = NumericProperty(1)
    def __init__(self):
        self.some_number = 2

...这引起了错误:

TypeError: Argument 'obj' has incorrect type (expected kivy._event.EventDispatcher, got GameModel)

我确实将该属性声明为类级别。在我的情况下,问题是该类本身不是从Kivy Widget类派生的,也不是-如错误消息中所述-不是从EventDispatcher对象派生的

源自EventDispatcher修复了我的问题:

class GameModel(EventDispatcher):

希望这有一天对其他人有帮助;-)