python - 如何使用传入的串行数据更新 Tkinter Canvas 中的对象?
问题描述
我创建了这个半圆,它从 Arduino(串行)中获取值,然后根据这些值旋转。问题是 Tkinter 画布也保留了旧的圆圈。我画布只是向我展示新的并删除旧的。代码附在下面。
import serial
import time
from tkinter import *
import math
#-----------------------------------------------
ser = serial.Serial('COM5',baudrate = 9600)
ser.flushInput()
#-----------------------------------------------
def tilt():
ser_bytes = int(ser.readline().decode('ascii'))
adata = (ser.readline().strip())
ser_bytes = str(adata.decode('utf-8'))
angle = int(ser_bytes)-247
arc = c.create_arc(50, 50, 200, 200,start =angle,extent=-180, fill="red")
c.delete(arc)
root.after(100,tilt)
print('X: {}' .format(ser_bytes))
root = Tk()
root.title("Control Panel")
root.geometry('1200x750')
frame_1 = Frame(root)
frame_1.pack()
c = Canvas(frame_1,width = 1000, height = 1000, bg = '#5F9EA0')
c.pack()
tilt()
root.mainloop()
解决方案
您应该arc
在程序启动时创建一次,然后使用canvas.itemconfig()
它来更改其start
角度:
import serial
from tkinter import *
#-----------------------------------------------
ser = serial.Serial('COM5', baudrate=9600)
ser.flushInput()
#-----------------------------------------------
def con():
ser_bytes = int(ser.readline().decode('ascii'))
return ser_bytes
def tilt():
angle = con()
c.itemconfig(arc, start=angle)
root.after(100, tilt)
print('X: {}'.format(angle))
root = Tk()
root.title("Control Panel")
root.geometry('1200x750')
frame_1 = Frame(root)
frame_1.pack()
c = Canvas(frame_1, width=1000, height=1000, bg='#5F9EA0')
c.pack()
# create the arc
arc = c.create_arc(50, 50, 200, 200, start=0, extent=-180, fill="red")
# start updating the arc
tilt()
root.mainloop()
推荐阅读
- javascript - Variable not updating in addeventlistener after value change
- c - Use special characters other than "\n" and "\0" in C
- c# - PrincipalContext 发送 windows 身份验证
- django - Django - Render HTTP before database connection
- javascript - Node.js - “socket hang up”简单来说是什么意思?
- r - 在 RHS 上使用 NSE 的 Dplyr 中的动态列
- plugins - 我应该使用什么表情符号插件:HTML 或图像?
- wordpress - 编辑站点标题区域文本
- python - 我是否正确使用了来自 Tensorflow 的 tf.control_dependencies?
- jquery - How can I change input to span in Datapicker?