小编Moh*_*afa的帖子

Tkinter matplotlib 画布对于实时数据更新太慢

我正在使用一个每秒发送 100 个读数的设备,我希望我的 GUI 有一个显示最后 300 个收集点的数据图。但是,我发现:

  1. 将新数据点附加到 y 轴队列

  2. 清除已经存在的情节

  3. 绘制新数据列表

  4. 重绘画布

在每个点之后需要将近 0.2 - 0.4 秒,这非常慢。

这是我目前使用的代码。while 循环不断检查队列,一旦有新元素被推送到队列中,它就会update将该元素作为参数进行调用。任何人都可以提出一些提高效率的建议或 matplotlib 的替代方案吗?

class GraphFrame:
    def __init__(self,root,channel,index):
        self.root=root
        self.frame=tk.Frame(self.root)
        self.frame.pack(side=tk.LEFT)
     
        self.y = Queue(maxsize = 300)
        
        self.fig, self.axes = plt.subplots(1,1)
        self.axes.plot(list(self.y.queue))

        self.canvas = FigureCanvasTkAgg(self.fig, master=self.frame)
        self.canvas.draw()
        self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, padx=5, pady=5)

    def update(self, new_point):
        if self.y.full():
            self.y.get()
        self.y.put(new_point)
        self.fig.axes[0].clear()
        self.fig.axes[0].plot(list(self.y.queue))
        self.canvas.draw()
Run Code Online (Sandbox Code Playgroud)

编辑:设法使用 blitting for matplotlib 解决了这个问题,并用带有图形图像的标签替换了 Tkinter 画布。将尝试在github上上传代码并链接它。

python tkinter real-time matplotlib

10
推荐指数
1
解决办法
244
查看次数

标签 统计

matplotlib ×1

python ×1

real-time ×1

tkinter ×1