Я создал код, который принимает сигнал от осциллографа и отображает в реальном времени в pyqtGraph внутри графического интерфейса, но его блокировка.Я пытаюсь использовать Qthread, чтобы разблокировать графический интерфейс, но я программист-любитель, и я не знаю, правильный ли это путь.
Так что я беру этот код, чтобы продолжать попытки без осциллографа, и яЯ пытаюсь сделать расчет в потоке и поддерживать работу графического интерфейса, но я застрял.Есть ли способ получить массив self.s и построить график в реальном времени без блокировки графического интерфейса?
import pyqtgraph as pg
import numpy as np
import time
import sys
from PyQt5 import QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QThread, pyqtSignal
class plotarT(QThread):
signal = pyqtSignal('PyQt_PyObject')
def __init__(self):
QThread.__init__(self)
def __del__(self):
self.wait()
def update(self):
self.phase = 0
self.t = np.arange(0, 3.0, 0.01)
self.s = np.sin(2 * np.pi * self.t + self.phase) #Sin function
self.phase += 0.1
time.sleep(2) #To simulate the time that oscilloscope take to respond
def run(self):
self.update()
self.signal.emit('QObject')
class Window(QDialog):
def __init__(self):
self.app = QtGui.QApplication(sys.argv)
super().__init__()
self.title = "PyQt5 GridLayout"
self.top = 100
self.left = 100
self.width = 1000
self.height = 600
self.InitWindow()
self.traces = dict()
pg.setConfigOptions(antialias=True)
def InitWindow(self):
self.setWindowIcon(QtGui.QIcon("icon.png"))
self.setWindowTitle(self.title)
self.setGeometry(self.top, self.left, self.width, self.height)
self.gridLayoutCreation()
vboxLayout = QVBoxLayout()
vboxLayout.addWidget(self.groupBox)
self.setLayout(vboxLayout)
self.show()
def gridLayoutCreation(self):
self.groupBox = QGroupBox("Grid Layout Example")
gridLayout = QGridLayout()
self.guiplot = pg.PlotWidget()
gridLayout.addWidget(self.guiplot,0,8,8,12)
self.groupBox.setLayout(gridLayout)
gridLayout.addWidget(QLabel('Tempo'), 0,0)
self.time = QLineEdit('')
gridLayout.addWidget(self.time, 1,0)
def plotar(self):
self.guiplot.clear()
self.guiplot.plot(s)
#self.guiplot.plot(c)
def teste(self):
self.get_thread = plotarT()
self.get_thread.start()
def main():
app = QtGui.QApplication(sys.argv)
form = Window()
form.show()
form.teste()
app.exec_()
if __name__ == '__main__':
main()