传感器数值可打印但无法显示在图表,报NameError错误求助
问题根源
你用global声明的result变量没有预先在全局作用域定义,若plot()方法执行时机早于onAccelerationChange()的第一次触发,全局作用域内还没有创建result变量,就会抛出未定义错误。另外在类方法中使用全局变量本身不符合封装规范,容易出现变量冲突、多实例互相干扰的问题。
最优解决方案(推荐)
改用类实例属性存储角度值,既避免全局变量污染,也能保证取值安全:
- 在类的
__init__初始化方法中预先给角度属性设置默认值,避免未定义问题
def __init__(self): # 保留原有初始化代码,新增以下行 self.current_angle = 0.0
- 修改
onAccelerationChange方法,删除全局变量声明,改为给实例属性赋值,同时补充除以零的异常防护:
def onAccelerationChange(self, acceleration, timestamp): xA = float(acceleration[0]) xZ = float(acceleration[2]) # 避免Z轴加速度为0时出现除以零报错 if abs(xZ) < 1e-6: xAngle = 0.0 else: xAngle = xA / xZ rads = math.atan(xAngle) self.current_angle = math.degrees(rads)
- 修改
plot方法的角度取值逻辑,直接读取实例属性即可:
def plot(self): # 原有绘制载荷柱图的代码全部保留,仅修改角度拼接行 Angle = "Angle: " + str(self.current_angle) + "°" self.text['text'] = Angle # 剩余画布刷新代码不变
若坚持使用全局变量的临时解决方案
在你的代码最顶部(所有类/函数定义之外)预先声明全局变量的初始值:
# 代码开头新增 result = 0.0
同时需要在plot方法开头也加上global result声明,才能正常读取全局变量的值。
内容的提问来源于stack exchange,提问作者midenginecrisis
相关产品推荐
相关产品推荐

