如何从其他类更新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
相关产品推荐
相关产品推荐

