pyqtgraph线程错误:QObject :: startTimer:不能从另一个线程启动计时器

问题描述

我一直在尝试将pyqtgraph与线程一起使用,并且遇到了以下问题:如果我运行下面的代码,它将进行图形化显示,但是,它将随机崩溃并出现分段错误,并不断抛出错误“ QObject: :startTimer:无法从另一个线程启动计时器到终端。有人可以帮助我有关如何在pyqtgraph中使用线程,或者是否有其他方法可以实现此目的?如果我删除了实际绘制数据的线,错误就会消失。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import pyqtgraph as pg

import time
import traceback

class Worker(QRunnable):
    def __init__(self,fn):
        super(Worker,self).__init__()
        self.fn = fn         
    def run(self):
        self.fn()

class GraphWidget(qframe):
    def __init__(self):
        super(GraphWidget,self).__init__()

        self.layout = QVBoxLayout()
        self.threadpool = QThreadPool()

        self.graph_btn = QPushButton("Start Graph")
        self.graph_btn.setCheckable(True)
        self.graph_btn.clicked.connect(self.startOLA)
        self.layout.addWidget(self.graph_btn)

        self.plt = pg.PlotWidget()
        self.plt.setYRange(0,10)
        self.plt.setxrange(0,20)
        self.layout.addWidget(self.plt)

        self.setLayout(self.layout)

        self.start_time = 0
        self.graph_timer = QTimer()
        self.graph_timer.setInterval(100)
        self.graph_timer.timeout.connect(self.createGraphWorker)

    def createGraphWorker(self):
        worker = Worker(self.updateGraph)
        self.threadpool.start(worker)

    def updateGraph(self):
        self.times.append(time.time()-self.start_time)
        self.y_vals.append(time.time()%10)

        self.plt.clear()
        self.plt.plot(self.times,self.y_vals)
    def startOLA(self):
        if (self.graph_btn.isChecked()):
            self.graph_timer.start()
            self.times = []
            self.y_vals = []
            self.start_time = time.time()
        else:
            self.graph_timer.stop()

class MainWindow(QMainWindow):
    def __init__(self,*args,**kwargs):
        super(MainWindow,self).__init__(*args,**kwargs)

        self.thing = GraphWidget()
        self.setCentralWidget(self.thing)
        self.show()
    
    
app = QApplication([])
window = MainWindow()
app.exec_()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)