CircuitPython LCD绘图报错ValueError: object not in sequence求助
错误原因分析与解决办法
错误根源
ValueError: object not in sequence 触发的直接原因是你尝试从main这个displayio.Group中移除一个当前不存在于其中的对象:
- 比如第一次调用
toggleCircle(1)时,main里有circle和StatusGrp,执行main.remove(circle)没问题;但如果再次调用toggleCircle(1),此时main里已经没有circle了,再执行main.remove(circle)就会报错。 - 同理,当
sel=0时,如果当前main里本来就没有modeCircle,执行main.remove(modeCircle)也会触发相同错误。
解决方法
方法1:移除前先检查对象是否存在
修改toggleCircle函数,在调用remove前先判断对象是否在Group中:
def toggleCircle(sel): if sel == 1: if circle in main: main.remove(circle) if StatusGrp in main: main.remove(StatusGrp) main.append(modeCircle) main.append(StatusGrp) elif sel == 0: if modeCircle in main: main.remove(modeCircle) if StatusGrp in main: main.remove(StatusGrp) main.append(circle) main.append(StatusGrp)
方法2:用状态变量记录当前显示的圆形
增加一个变量跟踪当前显示的是哪个圆形,避免重复执行无效的移除操作:
# 初始化状态变量,假设默认显示circle current_circle = circle def toggleCircle(sel): global current_circle if sel == 1 and current_circle != modeCircle: if StatusGrp in main: main.remove(StatusGrp) main.remove(current_circle) main.append(modeCircle) main.append(StatusGrp) current_circle = modeCircle elif sel == 0 and current_circle != circle: if StatusGrp in main: main.remove(StatusGrp) main.remove(current_circle) main.append(circle) main.append(StatusGrp) current_circle = circle
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

