[PyQt] Multi-threading and live-plotting software.
Fabien Lafont
lafont.fabien at gmail.com
Tue Feb 28 12:12:07 GMT 2012
Hello everyone,
I'm trying to plot live data. I manage to do it but the only problem
is it's a bit laggy because I'm comunicating with devices and it takes
few seconds to receive the datas. During this delay the plot
(matplotlib) is not responsive, and it's a bit problematic for my
application. So I'm trying to switch to a threaded soft.
How can I update my graph using a thread and do another (longer)
operation at the same time?
I've tried to write this simple code but it doesn't work... You will
directly see that I'm a beginner :)
from PyQt4 import QtCore, QtGui
import time
import sys
import random
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class Graph(FigureCanvas):
"""Matplotlib Figure widget"""
def __init__(self):
self.fig = Figure()
self.ax = self.fig.add_subplot(111)
FigureCanvas.__init__(self, self.fig)
FigureCanvas.updateGeometry(self)
# generates first "empty" plots
self.user = []
self.l_user, = self.ax.plot([], self.user)
self.fig.canvas.draw()
self.get_number()
def get_number(self):
self.result1 = random.randint(0,4)
self.user.append(self.result1)
time.sleep(0.5)
self.get_number()
class AThread(QtCore.QThread):
def run(self):
time.sleep(1)
plot.l_user.set_data(len(self.user), self.user)
plot.fig.canvas.draw()
FigureCanvas.updateGeometry(self)
def usingQThread():
app = QtCore.QCoreApplication([])
qApp = QtGui.QApplication(sys.argv)
plot = Graph()
thread = AThread()
thread.finished.connect(app.exit)
thread.start()
sys.exit(app.exec_())
Thanks!
Fab
More information about the PyQt
mailing list