这是这个问题的后续问题:Get inline data from serial
为了说清楚,我有一个TerminalPanel
类,其中包含OnSerialRead
方法:
def OnSerialRead(self, event):
"""Handle input from the serial port."""
text = event.data
self.text_ctrl_output.AppendText(text)
self.GetParent().graphics_panel.get_data(text)
到目前为止一切顺利。它获得了我期望从串口获得的所有东西(正如我在text_ctrl_outout.AppendText(text)
中看到的那样。
尽管如此,我想传递那些看起来像这样的信息:
通过2014-11-25 20:19:57 0 2 2 393
GraphicsPanel
方法到我的get_data
课程:
def get_data(self, text):
self.mario = text
print self.mario
我的问题是我在终端上得到的是:
20 14-1 1-25 20: 19:5 7 0 2 2 393
即使我一直在使用已接受的解决方案,但它只能帮助我漂亮打印它。我希望能够使用最后四列(即删除时间戳),以便我可以绘制这些值。
我怎样才能得到它们?
答案 0 :(得分:0)
如果整行以换行符结束" \ n"您需要将文本存储在缓冲区(字符串)中,直到它出现在传入文本中。它更容易连接和拆分
def __init__(self, ... ):
self.buffer=""
def OnSerialRead(self, event):
"""Handle input from the serial port."""
lines = (self.buffer + event.data).split('\n')
self.buffer= lines[-1] #anything after last line break store in buffer
for text in lines[:-1]: #work for 0 or more lines
self.text_ctrl_output.AppendText(text)
columns= text.split()
data=' '.join( columns[-4:] )
self.GetParent().graphics_panel.get_data(data)
如果是串行通信,您可能会在一段时间后清除缓冲区而不进行任何读取。您只需创建计时器并在此功能中每次重新启动。