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

如何从其他类更新Kivy Label组件?代码报错与标签未更新问题求助

解决Kivy中Label组件更新与代码不可达问题

我来帮你搞定这两个问题,咱们一步步拆解原因和解决方案:

问题1:「The following code is unreachable」错误

你在MyApp的build方法里,先写了return MyGrid(),这行代码会直接结束build函数的执行——函数一旦遇到return就会立刻返回,后面的Clock.schedule_interval(self.update, 1)根本没机会运行,所以IDE会提示这段代码不可达。

问题2:Label始终显示"unknown"无法更新

你在update方法里用App.accel.text = ac来修改文本,这是错误的:accel是MyGrid类实例的属性,不是App类的属性,这么写根本找不到你创建的那个Label组件,自然无法更新内容。

修复后的完整代码

下面是调整后的代码,我标注了关键修改点:

import kivy
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout

class MyGrid(GridLayout):
    def __init__(self, **kwargs):
        super(MyGrid, self).__init__(**kwargs)
        self.rows = 2
        self.accel = Label(text = "unknown")
        self.orein = Label(text = "unknown")
        self.add_widget(self.accel)
        self.add_widget(self.orein)

class MyApp(App):
    def build(self):
        # 关键修改1:先创建Grid实例并保存为App的属性
        self.grid_instance = MyGrid()
        # 关键修改2:把调度定时器的代码放在return之前,确保能执行
        Clock.schedule_interval(self.update, 1)
        return self.grid_instance

    def update(self, dt):
        ac = "dfskjjlfh"
        ore = "kjdsfkjdf"
        # 关键修改3:通过保存的Grid实例访问Label组件,修改文本
        self.grid_instance.accel.text = ac
        self.grid_instance.orein.text = ore

MyApp().run()

额外小技巧:从其他类更新Label

如果之后你需要从完全独立的其他类里更新这些Label,可以通过MyApp.get_running_app()获取当前运行的App实例,再访问保存的Grid实例来修改:

# 在任意其他类中
current_app = MyApp.get_running_app()
current_app.grid_instance.accel.text = "新的加速度数据"
current_app.grid_instance.orein.text = "新的方向数据"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:44:04