如何绑定到ListProperty的长度?

2024-06-01 01:15:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我的简化代码(还有一个GameWorld类,它是根小部件):

class Player(Entity):
    # done like this so `ammo` is a readonly property
    _ammo = ListProperty()
    ammo = AliasProperty(lambda self: self._ammo, bind=['_ammo'])

KV文件:

^{pr2}$

弹药的数量应该在屏幕上自动更新。这是因为ammo与{}绑定,但后者从未真正改变。它始终保持不变的列表对象,但内容会发生变化。在

什么是解决这个问题的好办法?在

编辑:

同时,我找到了以下解决方案。我自己触发与ammo关联的事件。在代码中弹药可能会改变的地方,我加了一行:

self.__class__.ammo.dispatch(self)

我通过self.__class__访问ammo,因为这给了我ListProperty对象,而不是列表。然后我调用它上的dispatch(self)来广播此属性已更改。然后更新GUI。在

如果有人有更好的方法,那就太棒了:)


Tags: 对象代码self列表部件classlikeentity
1条回答
网友
1楼 · 发布于 2024-06-01 01:15:45

您可以添加另一个AliasProperty

ammo_count = AliasProperty(lambda self: len(self._ammo), bind=['_ammo'])

每当_ammo更改其长度时,它都将更新。在

相关问题 更多 >