You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将matplotlib图表嵌入Tkinter GUI并绘制Arduino串口ECG实时数据

问题根源

你在绘图逻辑中调用了plt开头的全局pyplot接口,这类接口默认会创建独立的matplotlib画布窗口,不会渲染到你提前绑定到Tkinter组件的fig、ax对象上。

修复方案

直接修改start_plot函数,将所有plt开头的操作替换为你已经实例化的ax(子图对象)、fig(画布对象)、canvas(Tkinter绑定的画布组件)操作即可,修改后的函数代码如下:

def start_plot():
    data = np.array([])
    while True:
        a = s.readline()
        a.decode()
        b = float(a[0:4])
        data = np.append(data, b)
        # 替换plt全局操作为已绑定Tkinter的ax对象操作
        ax.cla()
        ax.plot(data)
        # 补充ax的样式配置(cla操作会清空之前设置的标题、坐标轴、网格规则)
        ax.set_title("Electrocadiogram")
        ax.set_xlabel("Time(Sec)")
        ax.set_ylabel("Voltage(mV)")
        ax.set_xlim(0, 200)
        ax.set_ylim(-0.5, 6)
        ax.grid(b=True, which='major', color='#666666', linestyle='-')
        ax.minorticks_on()
        ax.grid(b=True, which='minor', color='#666666', linestyle='-', alpha=0.2)
        # 刷新Tkinter中的画布,替换原plt.pause操作
        canvas.draw()
        canvas.flush_events()
        time.sleep(0.01)
    s.close()

补充说明

如果后续出现GUI无响应的卡顿问题,是因为while死循环阻塞了Tkinter的主事件调度,可将串口读取、绘图逻辑改用Tkinter自带的after定时器实现异步调度即可,不影响当前核心需求的实现。

内容的提问来源于stack exchange,提问作者Kennerdol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:24:03