我有一个USB GPS传感器,我正在尝试做一个人机界面,用户单击“开始”按钮,然后开始收集数据。为此,我使用了代码http://robotic-controls.com/learn/python-guis/tkinter-serial帮助自己。
我设法获取数据并将其仅在用户单击开始按钮时才显示在屏幕上,但是我看到当我单击按钮时,屏幕上会显示很多以前的数据。我的传感器每秒都会向我提供数据,当我运行程序时,如果在单击开始按钮之前等待5秒钟,则单击该按钮时,屏幕上将显示5行。
这是我的代码:
import serial
import tkinter
from serial import *
from tkinter import *
gps = list()
serialPort = "COM12"
baudRate = 4800
ser = Serial(serialPort , baudRate, timeout=0, writeTimeout=0)
root = Tk()
root.wm_title("Signal GPS")
etat = StringVar()
etat.set("Démarrer acquisition")
def StartStop():
j=0
if etat.get() == "Arreter acquisition" :
etat.set("Reprendre acquisition")
j=1
if (etat.get() == "Démarrer acquisition" or etat.get() == "Reprendre acquisition") and j == 0 :
etat.set("Arreter acquisition")
readSerial()
def quitter():
root.destroy()
valeurs = Canvas(root)
valeurs.grid(column=0,row=0, padx=10)
texte_lati = Label(valeurs, text='Latitude')
texte_lati.grid(column=0, row=0)
lati = Text ( valeurs, width=20, height=20, takefocus=0)
lati.grid(column=0, row=1)
texte_longi = Label(valeurs, text='Longitude')
texte_longi.grid(column=1, row=0)
longi = Text ( valeurs, width=20, height=20, takefocus=0)
longi.grid(column=1, row=1)
start = Button(root, textvariable=etat, text=etat, command=StartStop)
start.grid(column=0,row=2)
quitte = Button(root, text='Quitter', command=quitter)
quitte.grid(column=1,row=2)
serBuffer = ""
def readSerial():
while etat.get() == "Arreter acquisition" :
c = ser.read().decode("latin1")
if len(c) == 0:
break
global serBuffer
if c == '\r':
c = ''
if c == '\n':
if serBuffer[0:6] == '$GPGGA' :
gps.append(serBuffer.split(','))
serBuffer += "\n"
if gps[-1][2] == '' :
lati.insert('0.0', 'Pas de signal GPS\n')
else :
lati.insert('0.0', str(gps[-1][2]) + '\n')
if gps[-1][4] == '' :
longi.insert('0.0', 'Pas de signal GPS\n')
else :
longi.insert('0.0', str(gps[-1][4]) + '\n')
serBuffer = ""
else:
serBuffer += c
root.after(100, readSerial)
root.mainloop()
ser.close()
谁能解释我为什么要获得所有以前的数据?我希望使用while etat.get() == "Arreter acquisition" :
不会存储数据,但实际上可以存储...