我正在尝试使用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>
对象参数
知道怎么解决这个问题吗?
答案 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):
希望这有一天对其他人有帮助;-)