1 回答
TA贡献1856条经验 获得超5个赞
我认为您不需要使用线程或队列而不是 wx.Timers。但是,我也认为您实际上只需要 1 个wx.Timer
来检查并从串行端口(或其他数据源)获取数据。我建议wx.Timer
事件的处理程序(如果您期望数据为 1Hz,则可能以 ~2Hz 运行)应该执行以下操作:
检查新数据。如果没有新数据,立即返回,等待下一个
wx.Timer
事件。如果有新数据,请立即根据该数据进行解析和计算,并将其附加到该事件处理程序中的数据数组中。刚落,所有的存储和删除后临时数据,并有你
self.x1
,self.y1
等了最新数据,事件处理程序结束时。del XXX
代码中的所有内容——尤其是因为一个事件处理程序删除了在另一个地方创建的数据——看起来它们可能是一个问题。然后更新绘图。如果您认为绘图会很慢,您可以使用第二个计时器事件来查看 的长度是否
self.x1
已更改并重新绘制绘图。但是,我相信您不需要使用第二个计时器,只需更新数据事件处理程序中的图表即可。
有关如何完成此操作的示例,请参阅https://github.com/newville/wxmplot/blob/master/examples/stripchart.py 仅使用一个wx.Timer
获取新数据并更新绘图的方法。请注意,它使用wxmplot.PlotPanel.update_line()
哪个更新现有图比wxmplot.PlotPanel.plot()
为每个新数据集重做要快得多。
该next_data()
示例中的函数比从串行端口读取数据所需的操作更简单、更具确定性。但是你已经在做那部分,你在做的事情看起来不会太难或太慢。
添加回答
举报