Kivy中通过Factory调用其他类方法更新Label文本失效怎么解决
问题原因
你调用Factory.StatSummary()时实际是创建了一个全新的StatSummary类实例,这个新实例并没有被添加到界面渲染树中,你修改的是这个未挂载的实例属性,自然不会影响已经显示在界面上的原有StatSummary实例。打印语句正常输出是因为新实例的resetStatSummary方法确实正常执行了,但操作的对象和界面上的实例完全无关。
解决方法
你需要获取已经加载到ScreenManager中的原有StatSummary实例,直接修改这个实例的属性即可。你已经给StatSummary设置了name: "statSummary",可以通过ScreenManager的get_screen方法直接获取这个实例。
仅需修改.kv文件中ResetPopup的Reset按钮的on_release逻辑,把原来的:
Factory.StatSummary().resetStatSummary()
替换为:
app.root.get_screen('statSummary').resetStatSummary()
修改后完整的ResetPopup按钮逻辑如下:
<ResetPopup>: title: "Wait..." BoxLayout: cols: 1 orientation: "vertical" Label: text: "Are you sure you want to reset?" Button: text: "Go back" on_release: root.dismiss() Button: text: "Reset" on_release: root.dismiss() app.root.get_screen('statSummary').resetStatSummary() app.root.current = "interact" app.root.transition.direction = "right"
内容的提问来源于stack exchange,提问作者troyhays
相关产品推荐
相关产品推荐

