Skip to content

Instantly share code, notes, and snippets.

@daniestevez
Created August 17, 2020 06:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daniestevez/d08070bb1b2dca6a6becfb859f1f4592 to your computer and use it in GitHub Desktop.
Save daniestevez/d08070bb1b2dca6a6becfb859f1f4592 to your computer and use it in GitHub Desktop.
PyQt5 example
import sys
import matplotlib
import socket
matplotlib.use('Qt5Agg')
from PyQt5 import QtCore, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class Worker(QtCore.QThread):
output = QtCore.pyqtSignal(int)
def __init__(self, parent = None):
QtCore.QThread.__init__(self, parent)
self.idx = 55 # byte to look at
self.idx = 1 # I'm using this for easy debugging
# Create a TCP/IP socket
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect the socket to the port where the server is listening
server_address = ('localhost', 8100)
print ('connecting to %s port %s' % server_address)
self.sock.connect(server_address)
def __del__(self):
self.exiting = True
self.wait()
def run(self):
while True:
data = self.sock.recv(1024)
if data:
split = [data[i] for i in range(0, len(data))]
self.send_update(split[self.idx])
else:
break
def send_update(self, num):
self.output.emit(num)
class MplCanvas(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
super(MplCanvas, self).__init__(fig)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.canvas = MplCanvas(self, width=5, height=4, dpi=100)
self.setCentralWidget(self.canvas)
self.ydata = list()
self.show()
self.worker = Worker()
self.worker.output.connect(self.update_plot)
self.worker.start()
def update_plot(self, num):
print('Received', num)
# Drop off the first y element, append a new one.
self.ydata.append(num)
self.canvas.axes.cla() # Clear the canvas.
self.canvas.axes.bar(range(len(self.ydata)), self.ydata, color=(0.2, 0.4, 0.6, 0.6))
# Trigger the canvas to update and redraw.
self.canvas.draw()
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment