1
有时ObjectProperty
不适合。这是因为它只会在对象的值发生更改时引发事件。有没有办法在Kivy中创建自定义属性?
但是,当对象的属性改变时怎么办?事件不会引发。
考虑一类:
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
并有Kivy部件:
class MyWidget(Widget):
point = ObjectProperty()
def __init__(self, point):
super(MyWidget, self).__init__()
self.point = point
def on_point(self, obj, value):
# do something
当我改变一些关于point
会发生什么?
w = MyWidget(Point(0, 0))
w.point.x = 10
# callback not called!
回调不叫因为据ObjectProperty
而言,point
并没有改变。但我想将x
和y
的更改计入更改并引发一个事件。
类似于ListProperty
知道在列表长度变化时引发一个事件。
为此,我想我需要创建一个Property
子类PointProperty
。
但我还没有找到有关如何做到这一点的文件。帮助将不胜感激。
好主意,但是这还不够完善。如果我使用与Kivy无关的第三方课程,该怎么办?另外,我正在使用Kivy的'Vector'类,它不是以这种方式构建的(这是我引发这个问题的原因)。 –
@zeeMonkeez谢谢你指出这一点。 – jligeza
@AvivCohn跟踪*整个*对象的变化是毫无意义的,因为它会增加大量不必要的计算,从而减慢应用程序的运行速度。我不知道你试图通过试图跟踪外部类对象上的所有字段到底是什么;但无论如何,你可以把它包起来。 – jligeza