用pyqtgraph实时绘图

时间:2017-09-23 18:59:43

标签: 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__()
        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()

我很感激任何建议;这是我第一次使用pyqtgraph而我还没有掌握它...

1 个答案:

答案 0 :(得分:0)

我遇到了解决方案,万一有人遇到类似的问题:

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

添加对流程事件的调用会导致绘图正确更新!