【PyQt5】使用pyqtgraph绘图时UI卡顿的解决

思路是把所有数据处理计算的过程放在主线程之外的子线程内

问题,如果不对数据进行剪裁,长时间过后主线程内的绘图会消耗比较多的时间

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtWidgets,QtGui,QtCore
import pyqtgraph as pg
import sys,os,random,time,psutil

class UI_MainWindow(QMainWindow):
    def __init__(self):
        super(UI_MainWindow, self).__init__()
        self.setWindowTitle(‘CPUinfo‘)
        self.setWindowIcon(QIcon(‘./CPU.png‘))
        self.resize(600,480)

        self.main_widget = QWidget()
        self.main_layout = QGridLayout()
        self.main_widget.setLayout(self.main_layout)
        self.setCentralWidget(self.main_widget)
        self.plot_widget = QWidget()
        self.plot_layout = QGridLayout()
        self.plot_widget.setLayout(self.plot_layout)

        self.plot_plt = pg.PlotWidget()
        self.plot_plt.setYRange(max=100,min=0)
        self.plot_layout.addWidget(self.plot_plt)
        self.plot_plt.setYRange(max=100,min=0)

        self.main_layout.addWidget(self.plot_widget)

        self.setCentralWidget(self.main_widget)

class NewThread(QThread):
    trigger = pyqtSignal(list)
    def __init__(self):
        super(NewThread, self).__init__()
        self.dataList = []

    def run(self):
        print(‘NewThread start!‘)
        timelist = []
        while True:
            time.sleep(1)
            # Xtime = time.strftime("%H%M%S")
            Ycpu = "%0.2f" % psutil.cpu_percent(interval=1)
            self.dataList.append(float(Ycpu))
            # timelist.append(float(Xtime))
            # print(Xtime, Ycpu)
            self.trigger.emit(self.dataList)

class showMainWindow(UI_MainWindow):
    def __init__(self):
        super(showMainWindow, self).__init__()
        self.Thread1 = NewThread()
        self.Thread1.trigger.connect(self.Plot)

        self.Thread1.start()

    def Plot(self,list1):
        self.plot_plt.plot().setData(list1)

if __name__ == ‘__main__‘:
    app = QApplication(sys.argv)
    gui = showMainWindow()
    gui.show()
    sys.exit(app.exec_())

更新:解决一次时间长了之后一次绘制太多点导致卡顿问题

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 import QtWidgets,QtGui,QtCore
import pyqtgraph as pg
import sys,os,random,time,psutil
# from UI import UI_MainWindow

class UI_MainWindow(QMainWindow):
    def __init__(self):
        super(UI_MainWindow, self).__init__()
        self.setWindowTitle(‘CPUinfo‘)
        self.setWindowIcon(QIcon(‘./CPU.png‘))
        self.resize(600,480)

        self.main_widget = QWidget()
        self.main_layout = QGridLayout()
        self.main_widget.setLayout(self.main_layout)
        self.setCentralWidget(self.main_widget)
        self.plot_widget = QWidget()
        self.plot_layout = QGridLayout()
        self.plot_widget.setLayout(self.plot_layout)

        self.plot_plt = pg.PlotWidget()
        self.plot_plt.setYRange(max=100,min=0)
        self.plot_layout.addWidget(self.plot_plt)
        self.plot_plt.setYRange(max=100,min=0)

        self.main_layout.addWidget(self.plot_widget)

        self.setCentralWidget(self.main_widget)

class NewThread(QThread):
    trigger = pyqtSignal(list,list)
    def __init__(self):
        super(NewThread, self).__init__()
        self.dataList = []
        self.timeList = []
        self.a = 0

    def run(self):
        print(‘NewThread start!‘)

        while True:
            # time.sleep(1)
            # Xtime = time.strftime("%H%M%S")
            Ycpu = "%0.2f" % psutil.cpu_percent(interval=1)
            self.dataList.append(float(Ycpu))
            self.timeList.append(self.a)
            # timelist.append(float(Xtime))
            # print(Xtime, Ycpu)
            self.a += 1
            self.trigger.emit(self.dataList,self.timeList)

class showMainWindow(UI_MainWindow):
    def __init__(self):
        super(showMainWindow, self).__init__()
        self.Thread1 = NewThread()
        self.Thread1.trigger.connect(self.Plot)

        self.Thread1.start()

    def Plot(self,list,list1):
        self.plot_plt.plot().setData(list1[len(list1)-2:],list[len(list)-2:],pen=‘g‘,symbol=‘o‘)

if __name__ == ‘__main__‘:
    app = QApplication(sys.argv)
    gui = showMainWindow()
    gui.show()
    sys.exit(app.exec_())

原文地址:https://www.cnblogs.com/zxingwork/p/11330488.html

时间: 2024-08-29 23:12:10

【PyQt5】使用pyqtgraph绘图时UI卡顿的解决的相关文章

Eclipse使用Ctrl+C和Ctrl+V复制粘贴时总是卡顿

Eclipse使用Ctrl+C和Ctrl+V复制粘贴时总是卡顿,解决办法: 更改打开代码超链接按键Ctrl为Alt: Window -> Preferences -> General -> Editors -> Text Editors -> Hyperlinking 设定按键为:Alt,保存,即可.

android viewpager fragment切换时界面卡顿解决办法

目前开发的程序在切换View时界面卡顿现象比较严重,影响用户体验,当前项目共就四个View,每个View也只是按钮,所以可以同时加载,不让其它view销毁. 只需在Adapter中重载destroyItem类即可 @Override public void destroyItem(ViewGroup container, int position, Object object) { //重载该方法,防止其它视图被销毁,防止加载视图卡顿 //super.destroyItem(container,

分享魔兽世界7.0win10卡顿的解决方法

今天小编就为大家带来了魔兽世界7.0win10卡顿的解决方法,小伙伴们最近表示用win10系统玩魔兽实在是太卡了,小编就在网上找来了这么一篇攻略,希望能帮助到有需要的小伙伴们,一起来看一下吧! 注意!不是打开命令提示符 主要是我登录了半天都失败了 主要是因为她默认开启了录制和截屏. 在左下搜索框输入”windows powershell”,用管理员方式运行.windows powershell然后输入Get-AppxPackage *xboxapp* | Remove-AppxPackage,删

Android UI卡顿响应慢性能差怎么办?请用Systrace 来分析查看~

目录 一.Systrace 简介二.Systrace 使用方法三.使用命令行抓取 Systrace四.使用Systrace 检测UI 性能五.使用Systrace 检测警告以及掉帧问题六.查看trace 文件的快捷键七.代码中添加trace 标记具体分析问题所在八.使用TraceView 分析trace Log 一.Systrace 简介 Systrace 允许你收集和检查设备上运行的所有进程的计时信息. 它包括Androidkernel的一些数据(例如CPU调度程序,IO和APP Thread

Win10重命名文件夹导致资源管理器卡顿的解决办法

我本机使用的是 Win10 1607,不清楚是因为什么原因导致重命名文件夹时资源管理器会被卡死,找了很长时间终于找到了解决办法,现在我把步骤粘出来以便后续遇到相同问题的朋友能及时解决. 其实操作很简单,只需要简单的三步: 1. 打开任意文件夹 2. 点击左上角菜单栏中的"文件"按钮,选择"更改文件夹和搜索选项",如下图所示: 3. 在弹出的文件夹选项窗口中,依次点击"清除文件资源管理器历史记录"后的"清除"按钮和"还

关于myeclipse加载building workspace卡顿的解决办法

在MyEclipse的使用中,在建立新文件或者改动代码后,经常会出现building workspace半天卡顿不动的情况,如果开的程序过多,经常会发生失去响应,电脑要是再烂点,直接死机的情况也常有发生.如何解决这个问题,网上方法众说纷纭,这里只记录自己解决了的一个方法. 1.选择菜单栏里的project里的properties: (如果properties显示为不可用(灰色),就先build all或者 build   project,就会出现properties): 2.进去找到builde

横向滑动的listview效果的实现方法,scrollview嵌套水平滑动的listview卡顿的解决方法

很多时候,界面需要实现横向滑动的listview效果.网络上有一种方法,自定义了HorizontalListView,用法同正常的listview,可实现水平滑动效果. 但是如果一个界面 为垂直滑动的scrollview嵌套水平滑动的listview的时候,滑动水平listview的时候,会很卡.我最近就遇到了这样的问题,一直把思路放在监听水平和垂直滑动手势,想实现滑动角度小于45的时候 垂直的scrollview 滑动效果被禁止.但是一直没有研究出来. 于是一个偶然的机会,灵光一闪,想到用Ho

wordpress后台打开慢/卡顿的解决方法

---------------------2014年12月29日更新--------------------- 我已经用下面提到的第三种方法禁用了谷歌字体了,最近wordpress后台还是莫名奇妙地非常慢,卡顿感让我十分不爽,本着处女座追求完美的毛病,继续寻找原因. 这回是浏览器左下角一直显示“正在等待0.gravatar.com”,看样子问题还是出在gravatar头像上了,貌似是gravatar的服务被可恶的GFW给墙了!可是在wordpress上似乎没有办法完全删除gravatar相关的代

windows升级到1607后操作很卡顿的解决办法

CPU I5,固态128G,win7主系统,WIN10和WIN7都安装在固态硬盘上. 未升级之前,操作很流畅,以至于把家里的老古董电脑也换固态,系统换WIN10了.自从升级了1607后这个问题就出现了,进入到桌面倒是挺快的,但一进入桌面,操作什么东西都没反应,等反应过来了突突突出来一大堆,让人很是恼火,但家里的那台电脑升级后什么事也没有,很无语,难道是驱动的问题,考虑要不要重装,办公电脑上有几个软件很大,安装很麻烦,所以就尽量不走重装这条路,禁用服务.启动项.快速启动网上大部分解决方案都试过了,