问题描述
我一直在尝试将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 (将#修改为@)