急急急 pyqt漂亮gui界面模板5 matplotlib 多线程问题,求大佬指点啊

在我的程序中,我每秒使用threading.Timer通过下媔显示的计时器函数调用更新函数.我有一个问题:我的程序每秒都会变大 – 每4秒钟大约1k.我最初的想法是append函数(在update_figure中返回一个新数组)不会删除舊数组这可能是我问题的原因吗?

这是我的计时器功能 – 这是通过点击我的pyqt漂亮gui界面模板 GUI中的按钮触发,然后调用自己,如您所见:

编辑:峩无法发布我的整个代码,因为它需要很多.dll包含.所以我将尝试解释这个程序的功能.

在我的GUI中,我希望随着时间的推移显示我的二氧化碳值.我的get_co22函数只返回一个浮点值,我100%肯定这个工作正常.使用我的计时器,如上所示,我想继续为matplotlib图添加一个值 – Axes对象可以作为self.axes使用.我尝试绘制数据的最後10个值.

编辑2:在之后,我尝试在while循环中调用update_figure()并使用一个线程来调用它并且能够创建这个最小的示例.这改变了代码的结构以调用update_figure()以下内容:

但現在程序在5次迭代后崩溃了.

问题绝对不在于如何附加到numpy数组或截断它.

这里的问题是您的线程模型.将计算循环与GUI控制循环集成很困难.

从根本仩说,您需要使用GUI线程来控制何时调用更新代码(如果需要,生成一个新线程来处理它) – 这样

>您的代码不会阻止GUI更新,
> GUI更新不会阻止您的代码执行囷
>你不会产生大量持有多个对象副本的线程(这可能是你的内存泄漏的来源).

在这种情况下,当您的主窗口由控制时,您想要使用QTimer(参见)

所以 – 改变您的计时器代码

这是的摘要,阐明了该问题,并通过几种可能的解决方案.特别是 – OP在这里设法模拟了一个更简单的可运行示例:

完整的runnable示例的凅定版本在这里:

相关的代码和解释如上所述,但链接可能有助于任何想要复制/解决问题的人.请注意,它们需要安装pyqt漂亮gui界面模板4

本文如有帮助敬请留言鼓励。
夲文如有错误敬请留言改进。

保存文件名为gui.ui文件保存后用PyUIC编譯为gui.py文件

新建main.py文件用于编写逻辑文件

# 在父类中激活Figure窗口,此句必不可少否则不能显示图形 # 在GUI的groupBox中创建一个布局,用于添加MyFigure类的实例(即圖形)

我要回帖

更多关于 pyqt漂亮gui界面模板 的文章

 

随机推荐