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