場合によってはObjectProperty
は適切ではありません。これは、オブジェクトの値が変更されたときにのみイベントを発生させるためです。Kivyでカスタムプロパティを作成する方法はありますか?
しかし、オブジェクトの属性が変更されるとどうなりますか?イベントは発生しません。
クラスを考えてみましょう:
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
そしてKivyウィジェット:私はおよそpoint
何かを変更する場合
class MyWidget(Widget):
point = ObjectProperty()
def __init__(self, point):
super(MyWidget, self).__init__()
self.point = point
def on_point(self, obj, value):
# do something
はどうなりますか?
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