在PlotWidget图形用户界面中运行实时pyqtgraph

2024-04-29 02:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些帮助我的图形用户界面,我与PySide和Qt设计师。在我的Gui代码中,我有PlotWidget,我想在其中实现pyqtgraph。

我试图实现的PyQtGraph的代码(我在internet上找到的一些示例:) 图形.py:

import pyqtgraph as pg
import numpy as np
plt = pg.plot()
bufferSize = 1000
data = np.zeros(bufferSize)
curve = plt.plot()
line = plt.addLine(x=0)
plt.setRange(xRange=[0, bufferSize], yRange=[-50, 50])
i = 0
def update():
    global data, curve, line, i
    n = 10  # update 10 samples per iteration
    rand = np.random.normal(size=n)
    data[i:i+n] = np.clip(data[i-1] + rand, -50, 50)
    curve.setData(data)
    i = (i+n) % bufferSize
    line.setValue(i)

timer = pg.QtCore.QTimer()
timer.timeout.connect(update)
timer.start(20)
pg.QtGui.QApplication.instance().exec_()

由于pg.QtGui.QApplication.instance().exec_()行的原因,它在运行时没有命令行>;python>;import graph.py

现在我想在我的GUI中运行这个随机的plot-in-plot小部件。

来自QtDesigner的代码:

from PySide import QtCore, QtGui

class Ui_MainDialog(object):
    def setupUi(self, MainDialog):
        MainDialog.setObjectName("MainDialog")
        MainDialog.resize(400, 300)
        self.nameEdit = QtGui.QLineEdit(MainDialog)
        self.nameEdit.setGeometry(QtCore.QRect(30, 50, 181, 31))
        self.nameEdit.setText("")
        self.nameEdit.setObjectName("nameEdit")
        self.showButton = QtGui.QPushButton(MainDialog)
        self.showButton.setGeometry(QtCore.QRect(250, 50, 101, 31))
        self.showButton.setObjectName("showButton")
        self.MainGraph = PlotWidget(MainDialog)
        self.MainGraph.setGeometry(QtCore.QRect(70, 100, 256, 192))
        self.MainGraph.setObjectName("MainGraph")

        self.retranslateUi(MainDialog)
        QtCore.QMetaObject.connectSlotsByName(MainDialog)
        MainDialog.setTabOrder(self.showButton, self.nameEdit)
        MainDialog.setTabOrder(self.nameEdit, self.MainGraph)

    def retranslateUi(self, MainDialog):
        MainDialog.setWindowTitle(QtGui.QApplication.translate("MainDialog", "MainDialog", None, QtGui.QApplication.UnicodeUTF8))
        self.nameEdit.setPlaceholderText(QtGui.QApplication.translate("MainDialog", "Log Window", None, QtGui.QApplication.UnicodeUTF8))
        self.showButton.setText(QtGui.QApplication.translate("MainDialog", "Show Graph!", None, QtGui.QApplication.UnicodeUTF8))

from pyqtgraph import PlotWidget

现在我的主程序是:

from PySide.QtCore import *
from PySide.QtGui import *
import example3
import sys

class Maindialog(QDialog,example3.Ui_MainDialog):

    def __init__(self, parent=None):
        super(Maindialog,self).__init__(parent)
        self.setupUi(self)
        self.connect(self.showButton,SIGNAL("clicked()"),self.showBOX)

    def showBOX(self):
        QMessageBox.information(self, "hello", "hello there  " + self.nameEdit.text())
        print"hello world"
        plt=self.MainGraph
        #z.plot(x = [0, 1, 2, 4,7,8,9,0], y = [4, 5, 9, 6,1,2,3,4])
        import numpy as np
        import pyqtgraph as pg

        bufferSize = 1000
        data = np.zeros(bufferSize)
        curve = plt.plot()
        curve.setData()
        line = plt.addLine(x=0)
        plt.setRange(xRange=[0, bufferSize], yRange=[-50, 50])
        i = 0

        def update():
              global data, curve, line, i
              n = 10  # update 10 samples per iteration
              rand = np.random.normal(size=n)
              data[i:i+n] = np.clip(data[i-1] + rand, -50, 50)
              curve.setData(data)
              i = (i+n) % bufferSize
              line.setValue(i)
        timer = pg.QtCore.QTimer()
        timer.timeout.connect(update)
        timer.start(20)
        if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
            pg.QtGui.QApplication.instance().exec_()

我有错误QCoreApplication::exec: The event loop is already running

部分原因是我理解这个问题,Pyqtgraph是用PyQt本身创建的,当我要求它运行事件(更新实时图)时,它说事件已经在主图形用户界面上工作了。。。

请建议如何在我的gui中实现运行pyqtgraph:

感谢修改代码:

非常感谢!


Tags: importselfdataplotnppltpgcurve
1条回答
网友
1楼 · 发布于 2024-04-29 02:18:53

这些对函数的更改是必需的:都是关于保持这些变量的。在我的系统中,我有一个特定的错误,说变量是未定义的。

def showBOX(self):
    QMessageBox.information(self, "hello", "hello there  " + self.nameEdit.text())
    print"hello world"
    plt=self.MainGraph
    #z.plot(x = [0, 1, 2, 4,7,8,9,0], y = [4, 5, 9, 6,1,2,3,4])
    import numpy as np
    import pyqtgraph as pg

    bufferSize = 1000
    self.data = np.zeros(bufferSize)
    self.curve = plt.plot()
    self.curve.setData()
    self.line = plt.addLine(x=0)
    plt.setRange(xRange=[0, bufferSize], yRange=[-50, 50])
    self.i = 0

    def update():
          n = 10  # update 10 samples per iteration
          rand = np.random.normal(size=n)
          self.data[self.i:self.i+n] = np.clip(self.data[self.i-1] + rand, -50, 50)
          self.curve.setData(self.data)
          self.i = (self.i+n) % bufferSize
          self.line.setValue(self.i)
    self.update = update
    self.timer = pg.QtCore.QTimer()
    self.timer.timeout.connect(self.update)
    self.timer.start(20)

相关问题 更多 >