我有一个 Python/Cocos 应用程序,它(除其他外)通过总线接收事件并在屏幕上显示相关信息。
我有一个cocos.text.Label
显示来自远程传感器的值。当我尝试通过设置标签来使用新值更新此标签时,element.text
我遇到了分段错误。
在实际代码中,其他东西使用这个值没有任何问题,所以我相信这是一个问题cocos.text.Label
,但是分段错误仅在总线触发更新而不是按键事件或类似事件时发生。
下面是一个展示相同行为的最小示例:
#!/usr/bin/python
import cocos
import functools
import pyglet
import remotes # Proprietary library for getting events through a remote event bus
class TestLayer(cocos.layer.Layer, pyglet.event.EventDispatcher):
is_event_handler = True
def __init__(self):
super(TestLayer, self).__init__()
self.bus = remotes.RemoteEventBus()
widget = remotes.RemoteWidget("force", self.bus, None)
widget.set_on_value_listener(functools.partial(self.on_value_change))
self.label_value = 0.0
self.label = cocos.text.Label(text=str(self.label_value))
self.add(self.label)
def on_value_change(self, event):
# Normalised_value will be between 0.0 and ~1.1
self.update_label(int(event.normalized_value * 100))
def on_key_press(self, key, modifiers):
self.update_label(key)
def update_label(self, value):
self.label_value = value
### Segfault here (sometimes
self.label.element.text = str(self.label_value)
if __name__ == "__main__":
cocos.director.director.init(width=320, height=240, caption="Segfault Test", fullscreen=False)
test_layer = TestLayer()
main_scene = cocos.scene.Scene(test_layer)
cocos.director.director.run(main_scene)
看起来传递给标签的值会影响它是否存在段错误,但我不知道为什么。什么可能导致这种行为?
为使用专有库道歉,我正在努力在没有它的情况下重现这个问题,但到目前为止还没有运气。