如题,需要实现的功能是在tkinter的UI界面能根据serial接收到的数据刷新内容。
在尝试过while循环里mainloop更新、通过StringVar更新、通过update函数更新、通过after和sleep函数定时更新等操作,终于找到了正确的方法——多线程。(不排除其他某些方法我还不会用)
简版代码:
import serial,threading
import tkinter as tk
window = tk.Tk()
window.title("My window")
window.geometry('500x300')
str = tk.StringVar()
str.set('Start')
ser = serial.Serial('COM6')#我这里用到的串口是COM6,若不同注意修改
ser.baudrate=9600
ReadyToStart = True
def startButton():
if(ReadyToStart):
str.set('Running')
button = tk.Button(window, textvariable=str, command=startButton).grid()
OutputText = tk.Text(window, wrap=tk.WORD, width=70, height=20)
OutputText.grid()
def ReadUART():#接收串口数据
while (True):
try:
idx = int.from_bytes(ser.read(1), byteorder='big', signed=False)#转化为整型数字
OutputText.insert(tk.END, idx)
OutputText.insert(tk.END, ' ')
#print(idx, end='')
except:
print("Something wrong")
ReadUARTThread = threading.Thread(target=ReadUART)#多线程
ReadUARTThread.start()
window.mainloop()
上述代码运行后,在下位机发送数据时能在下图框内接收到。
小学期苦苦挣扎,完成完整的想法后再上传代码
20190905更新:
后续代码就不贴了,更需要的是想象力。
小学期快结束了,fkq是我最讨厌的老师,没有之一。