1 回答

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
我認(rèn)為您不需要使用線程或隊(duì)列而不是 wx.Timers。但是,我也認(rèn)為您實(shí)際上只需要 1 個(gè)wx.Timer
來(lái)檢查并從串行端口(或其他數(shù)據(jù)源)獲取數(shù)據(jù)。我建議wx.Timer
事件的處理程序(如果您期望數(shù)據(jù)為 1Hz,則可能以 ~2Hz 運(yùn)行)應(yīng)該執(zhí)行以下操作:
檢查新數(shù)據(jù)。如果沒(méi)有新數(shù)據(jù),立即返回,等待下一個(gè)
wx.Timer
事件。如果有新數(shù)據(jù),請(qǐng)立即根據(jù)該數(shù)據(jù)進(jìn)行解析和計(jì)算,并將其附加到該事件處理程序中的數(shù)據(jù)數(shù)組中。剛落,所有的存儲(chǔ)和刪除后臨時(shí)數(shù)據(jù),并有你
self.x1
,self.y1
等了最新數(shù)據(jù),事件處理程序結(jié)束時(shí)。del XXX
代碼中的所有內(nèi)容——尤其是因?yàn)橐粋€(gè)事件處理程序刪除了在另一個(gè)地方創(chuàng)建的數(shù)據(jù)——看起來(lái)它們可能是一個(gè)問(wèn)題。然后更新繪圖。如果您認(rèn)為繪圖會(huì)很慢,您可以使用第二個(gè)計(jì)時(shí)器事件來(lái)查看 的長(zhǎng)度是否
self.x1
已更改并重新繪制繪圖。但是,我相信您不需要使用第二個(gè)計(jì)時(shí)器,只需更新數(shù)據(jù)事件處理程序中的圖表即可。
有關(guān)如何完成此操作的示例,請(qǐng)參閱https://github.com/newville/wxmplot/blob/master/examples/stripchart.py 僅使用一個(gè)wx.Timer
獲取新數(shù)據(jù)并更新繪圖的方法。請(qǐng)注意,它使用wxmplot.PlotPanel.update_line()
哪個(gè)更新現(xiàn)有圖比wxmplot.PlotPanel.plot()
為每個(gè)新數(shù)據(jù)集重做要快得多。
該next_data()
示例中的函數(shù)比從串行端口讀取數(shù)據(jù)所需的操作更簡(jiǎn)單、更具確定性。但是你已經(jīng)在做那部分,你在做的事情看起來(lái)不會(huì)太難或太慢。
添加回答
舉報(bào)