pyqtgraph를 사용하여 계측기에서 수집되는 데이터의 실시간 플롯을 얻으려고합니다.실시간 데이터 그래프를위한 pyqtgraph 구현
데이터 수집은 주 프로세스에 의해 처리됩니다. 주 프로세스에서 데이터 수집은 연결을 통해 그 프로세스를 처리하는 하위 프로세스로 전달됩니다. 난 그냥 새 데이터를 전달하려고하고 새로운 데이터가 전달되면 업데이 트해야합니다.
Qt Timer 업데이트 루프 내부에서 연결을 읽음으로써이를 구현하려고 시도했지만 연속적인 업데이트주기 사이에 그래프 데이터 (내가 추가하려는)를 전달하는 데 어려움이 있습니다. 나는 아래 코드에서 생략했지만, 근본적으로 connData를 연속적으로 많이 사용하고 싶습니다. 글로벌을 사용하는 것이 효과적 일 것이라고 생각했지만, 어떤 이유로 여기에서 구현할 수 없습니다.
편집 1 :
나가서 설명하자면 NameError를 : 나는 pyqtgraph 예와 비교 한 문제는 Qtimer의 업데이트 프로세스에 데이터를 전달하는 것, 내가 얻을 전역 이름은 'CurveData는'정의되지
pyqtgraph의 다중 처리 모듈을 사용하는 대신이 방법을 시도한 이유는 매번 연결을 통해 전체 데이터 세트를 전달하고 싶지 않기 때문입니다. 감사!
편집 2 : pyqtgraph.multiprocess 문서가 있나요?
는
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_()
수정 된 버전 (이 제공 한 원본 코드) :
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_()
감사합니다. 귀하의 예제가 저에게 효과적이며이 프로세스를 더 우아하게 보이도록 구현할 수 있습니다. 그러나 나는 이들 중 어느 것이 내가 예를 들어, 같은 방법으로 부를 수 있는지 알고 싶다. 'pg.GraphicsWindow'를 pyqtgraph 예제에 추가했습니다. – EOF
여러 QtProcess 프로세스를 구현하는 데 문제가 있습니다. proc = mp.QtProcess() ..to .. data = proc.transfer ([])를 루프에 넣어서 각 객체의 목록을 갖도록했습니다. 이것은 주로 작동하지만 가끔은 실속하고 나는 ctrl - C를 할 수 없습니다. 여러 QtProcess-es를 생성하는 데 더 안정적인 방법이 있습니까? 감사합니다 – EOF
버그와 같은 소리입니다.이 문제를 해결하기 위해 단일 프로세스에서 여러 개의 플롯을 작성하는 것이 가장 좋은 이유는 무엇입니까? 어쨌든 더 나은 접근 방법 인 것 같습니다. – Luke