python - 使用 python turtle 在仪表上显示值
问题描述
我有一个连接到 arduino 的盖革计数器。草图吐出 sievert 值,这是一个两位小数的浮点数。我正在尝试在圆形表盘上显示该值。
它最明显是一个pebkac,但我有点卡在这个错误上:
Traceback (most recent call last):
File "./turtle-gauge.py", line 60, in <module> draw_gauge(sev, pen)
File "./turtle-gauge.py", line 53, in draw_gauge
angle = int((sev / 40) * 360)
TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'
这是代码:
#!/usr/bin/python3
import turtle
import serial
import time
wn = turtle.Screen()
wn.bgcolor("black")
wn.setup(width=600, height=600)
wn.title("Geiger Counter")
wn.tracer(0)
# Let there be a serial port
ser = serial.Serial('/dev/ttyACM1')
ser.flushInput()
# Let there be a functon to read it
def read_sev():
sev = ser.readline()
sev = float(sev[0:len(sev)-5].decode("utf-8"))
# Let there be a drawing tool
pen = turtle.Turtle()
pen.hideturtle()
pen.speed(0)
pen.pensize(3)
# Let there be a gauge with a hand
def draw_gauge(sev, pen):
pen.up()
pen.goto(0,210)
pen.setheading(180)
pen.color("green")
pen.pendown()
pen.circle(210)
pen.penup()
pen.goto(0,0)
pen.setheading(90)
for _ in range(40):
pen.fd(190)
pen.pendown()
pen.fd(20)
pen.penup()
pen.goto(0,0)
pen.rt(50)
# Draw the gauge hand
pen.penup()
pen.goto(0,0)
pen.color("white")
pen.setheading(90)
angle = (sev / 40) * 360
pen.rt(angle)
pen.pendown()
pen.fd(200)
while True:
sev=read_sev()
draw_gauge(sev, pen)
wn.update()
time.sleep(1)
pen.clear()
wn.mainloop()
请帮忙!
解决方案
如果使用sev=read_sev()
,函数read_sev()
必须返回一个值。如果你不返回一个值,它会给你None
.
发生错误是因为 sev 是None
,并且您不能除以None
40。
要修复错误,您只需要return sev
在您的read_sev()
函数中。
推荐阅读
- javascript - 如何使用 puppeteer 下载网页并将图像转换为 base64,以便最终输出为单页文件?
- java - 带有 MutableLiveData 的 Android 布尔更改侦听器
- react-native - 如何在本机反应中正确编写 If else
- javascript - 通过 JS 设置 Ninja 表单输入值
- python - 如何用 SciPy 求解这个方程(两边都包括 f(x))
- java - 无法使用 void analyze(ImageProxy) 实现 Android ImageAnalysis.Analyzer 接口
- python - Pandas 在任何列中查找具有值的行
- python - python - 如何创建循环通过两个参数的数据帧,然后使用进一步的循环来定义变量
- elasticsearch - Elasticsearch _bulk 返回空字典
- c++ - 即使在 unicode 操作系统上,FormatMessageA() 也应该以正确的方式格式化消息吗?