You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy中Label仅通过按钮直接调用函数时才更新,其他场景不生效问题

问题根源

核心存在2个错误:

  1. 每次调用GENERATE方法时都新建了Generate类实例,你修改的是这个未被添加到界面中的新实例的label,而不是已经添加到ScreenManager中、当前正显示在页面上的Generate页面对应实例,所以界面上看不到任何变化。
  2. 线程定义语法错误,target参数需要传入可调用对象,你写的target=p.getTotalPair()是直接调用了方法并把返回值传给了target,不是把方法本身交给线程执行。
修复步骤
  • 不要在GENERATE方法内新建Generate实例,直接从ScreenManager中读取已经注册好的对应实例即可
  • 修正线程写法,涉及UI更新的操作需要保证在主线程执行,建议给getTotalPair添加@mainthread装饰器
  • 你之前写的Clock.schedule_once(XRPqr().getTotalPair, 1)也存在同样的新建实例错误,需要替换为已注册的实例调用

修复后的代码示例

修正GENERATE方法

def GENERATE(self):
    self.sm.current = 'generate'
    # 从ScreenManager读取已存在的Generate页面实例,不要新建
    generate_screen = self.sm.get_screen('generate')
    # 不需要线程的话直接调用即可
    generate_screen.getTotalPair()
    # 如果确实需要异步读文件,修正线程写法(不要加括号):
    # threading.Thread(target=generate_screen.getTotalPair).start()

正确的延迟调度写法

generate_screen = self.sm.get_screen('generate')
Clock.schedule_once(lambda dt: generate_screen.getTotalPair(), 1)

内容的提问来源于stack exchange,提问作者Johhny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:15:05