Python 2.7 用pyqtgraph进行实时绘图

Python 2.7 用pyqtgraph进行实时绘图,python-2.7,plot,pyqtgraph,Python 2.7,Plot,Pyqtgraph,我在使用pyqtgraph进行实时绘图时遇到问题。我希望绘图每从串行输入中收集100个项目就更新一次,但在收集完数据后,曲线只显示一次。调试打印“boo”在每100项之后打印到控制台,但是updatePlot()似乎只有在结束循环时才被调用。这是我的代码: class EKG(QtGui.QMainWindow, out.Ui_MainWindow): def __init__(self): super(self.__class__, self).__init__()

我在使用pyqtgraph进行实时绘图时遇到问题。我希望绘图每从串行输入中收集100个项目就更新一次,但在收集完数据后,曲线只显示一次。调试打印“boo”在每100项之后打印到控制台,但是
updatePlot()
似乎只有在结束循环时才被调用。这是我的代码:

class EKG(QtGui.QMainWindow, out.Ui_MainWindow):

    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)
        self.collectedData = []
        self.dataPlot.showGrid(x=True, y=True, alpha=0.6)
        self.plt = self.dataPlot.plot(pen='m', antialias=True)
        self.port = "COM9"
        self.actionZako_cz.triggered.connect(self.close_window)
        self.startBtn.clicked.connect(self.collectData)

    def getTime(self):
        return int(self.timeBox.toPlainText())

    def updatePlot(self):
        self.plt.setData(self.collectedData)

    def collectData(self, howLong):
        howLong = self.getTime()
        self.collectedData = []
        serialData = serial.Serial(self.port, 57600)
        t_end = time.time() + howLong
        while time.time() < t_end:
            try:
                self.collectedData.append(int(serialData.readline().strip()))
            except ValueError:
                pass
            if len(self.collectedData) % 100 == 0:
                print "boo"
                self.updatePlot()
        serialData.close()
class EKG(QtGui.QMainWindow,out.Ui\u MainWindow):
定义初始化(自):
超级(self.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
self.setupUi(self)
self.collectedData=[]
self.dataPlot.showGrid(x=True,y=True,alpha=0.6)
self.plt=self.dataPlot.plot(pen='m',antialas=True)
self.port=“COM9”
self.actionZako_cz.triggered.connect(self.close_窗口)
self.startBtn.clicked.connect(self.collectData)
def getTime(self):
return int(self.timeBox.toPlainText())
def updatePlot(自):
self.plt.setData(self.collectedData)
def收集数据(自身、长时间):
howLong=self.getTime()
self.collectedData=[]
serialData=serial.serial(self.port,57600)
t_end=time.time()+howLong
当time.time()结束时:
尝试:
self.collectedData.append(int(serialData.readline().strip())
除值错误外:
通过
如果len(自收集数据)%100==0:
打印“boo”
self.updatePlot()
serialData.close()

如有任何意见,我将不胜感激;这是我第一次使用pyqtgraph,我还没有掌握它的窍门…

我找到了解决方案,以防有人遇到类似的问题:

def updatePlot(self):
    self.plt.setData(self.collectedData)
    QtGui.QApplication.processEvents()

添加对process events的调用会导致绘图正确更新

我找到了解决方案,以防有人遇到类似问题:

def updatePlot(self):
    self.plt.setData(self.collectedData)
    QtGui.QApplication.processEvents()

添加对process events的调用会导致绘图正确更新

我通常倾向于避免
processEvents()
以避免重新进入事件循环。相反,对串行部分使用异步机制(Qt串行支持或带Qt循环集成的Python、twisted/trio/asyncio或至少一个QTimer),然后在调用update之后,您自然会以任何方式将控制权交还给循环。我通常倾向于避免
processEvents()
以避免重新进入事件循环。相反,对串行部分使用异步机制(Qt串行支持或带有Qt循环集成的Python、twisted/trio/asyncio或至少一个QTimer),然后在调用update之后,您自然会将控制权交还给循环。