Я ПЫТАЮСЬ создать приложение, в котором я хочу иметь несколько PlotWidgets, отображающих сигнал от 5 датчиков, которые у меня есть в моем Arduino. Как только у меня есть два обновляющихся графика, графический интерфейс не отвечает, и мне нужно приостановить/перезапустить график и всплывающие предупреждения для некоторых значений. Чтобы решить эту проблему, я начал исследования, чтобы использовать QThread, но это может быть невозможно с PyQtGraph, поскольку мы не можем рисовать в нескольких потоках? Мой код для двух PlotWidgets выглядит так:
from PyQt4 import QtCore, QtGui
import pyqtgraph as pg
import random
import sys
class MainWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.button = QtGui.QPushButton('Start Plotting Left')
layout.addWidget(self.button)
self.button.clicked.connect(self.plotter)
self.button2 = QtGui.QPushButton('Start Plotting Right')
layout.addWidget(self.button2)
self.button2.clicked.connect(self.plotter2)
self.plot = pg.PlotWidget()
layout.addWidget(self.plot)
self.plot2 = pg.PlotWidget()
layout.addWidget(self.plot2)
self.setLayout(layout)
def plotter(self):
self.data =[0]
self.curve = self.plot.getPlotItem().plot()
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.updater)
self.timer.start(0)
def updater(self):
self.data.append(self.data[-1]+0.2*(0.5-random.random()) )
self.curve.setData(self.data)#Downsampling does not help
def plotter2(self):
self.data2 =[0]
self.curve2 = self.plot2.getPlotItem().plot()
self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.updater2)
self.timer.start(0)
def updater2(self):
self.data2.append(self.data[-1]+0.2*(0.5-random.random()) )
self.curve2.setData(self.data) #Downsampling does not help
if __name__ == '__main__':
app = QtGui.QApplication([])
window = MainWindow()
window.show()
app.exec_()
Я готов много читать и пробовать из QThread, но сначала мне нужно знать, возможно ли это, или я трачу свои дни и сон впустую. У кого-нибудь есть намек на то, как я могу заставить его работать?