die Umsetzung pyqtgraph für live-Daten Grafik

Ich versuche zu bekommen eine live-plot der Daten, wie Sie gesammelt wird durch ein instrument mit pyqtgraph.

Erhebung der Daten erfolgt durch den Haupt-Prozess-dieser wird dann übergeben Sie die Verbindung zu einem Teilprozess, dass Parzellen. Ich versuche nur, um pass die neuen Daten und es update, wenn die neuen Daten übergeben.

Habe ich versucht zu implementieren, indem Sie die Verbindung, Lesen Sie im inneren des Qt-Timer-update-Schleife, aber dann habe ich Schwierigkeiten beim graph-Daten (die möchte ich anfügen) zwischen aufeinander folgenden update-Zyklen. Ich weggelassen aus die folgenden code, aber grundsätzlich möchte ich an aufeinanderfolgenden viele connData, dachte ich mit einem global funktionieren würde, aber aus irgendeinem Grund kann ich nicht umsetzen, dass hier.

EDIT 1: Das problem, dass ich im Vergleich mit der pyqtgraph Beispiele scheint die übergabe von Daten an den update-Prozess der Qtimer, bekomme ich:

NameError: global name 'CurveData' ist nicht definiert

Dem Grund habe ich versucht, es zu tun auf diese Weise, anstatt mit dem multiprocessing-Modul pyqtgraph ist, dass ich nicht wollen, übergeben Sie die gesamten Daten über die Verbindung jedes mal (ich dachte, das wäre nötig). Danke!

EDIT 2: gibt es Dokumentation für pyqtgraph.Multiprozess irgendwo?

(dies ist der ursprüngliche code)

import multiprocessing
import numpy as np
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
import pyqtgraph.opengl as gl
import sys
import os

def MakeGraph(conn):

    win = pg.GraphicsWindow(title = "test")
    win.resize(300,300)

    p1 = win.addPlot(title = "test")

    curve = p1.plot(pen = 'y')
    timer = QtCore.QTimer()

    def Update():
        try:
            ConnData = conn.recv()
            ConnData = [float(i) for i in ConnData]
            curve.setData(ConnData)
        except EOFError:
            print "Graph connection closed\n"
            timer.stop()
            QtGui.QApplication.quit()

    timer.timeout.connect(Update)
    timer.start(0)

    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            QtGui.QApplication.instance().exec_()

modifizierte version:

import multiprocessing
import numpy as np
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
import pyqtgraph.opengl as gl
import sys
import os

def MakeGraph(conn):

    win = pg.GraphicsWindow(title = "test")
    win.resize(300,300)

    p1 = win.addPlot(title = "test")

    curve = p1.plot(pen = 'y')
    timer = QtCore.QTimer()
    CurveData = []

    def Update():
        global CurveData
        try:
            ConnData = conn.recv()
            ConnData = [float(i) for i in ConnData]
            CurveData = np.append(CurveData,ConnData)
            curve.setData(CurveData)
        except EOFError:
            print "Graph connection closed\n"
            timer.stop()
            QtGui.QApplication.quit()

    timer.timeout.connect(Update)
    timer.start(0)

    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            QtGui.QApplication.instance().exec_()

InformationsquelleAutor EOF | 2013-07-30

Schreibe einen Kommentar