Pyqt5 - Automate Serial Module
I am trying to automate serial connection without clicking on button. When the gui load, serial should be read immediately and refreshed at interval without using the mouse to trig
Solution 1:
A basic rule in Qt is that the GUI should not be updated from a thread other than the main one, this is called the GUI thread. There are several options such as sending the data through signals to the main thread, or using a QRunnable
with QThreadPool
as shown below:
Code:
qtCreatorFile = "gui.ui"
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
estudiantes = [' ',' ',' ',' ']
classSerialRunnable(QtCore.QRunnable):
def__init__(self, w):
QtCore.QRunnable.__init__(self)
self.w = w
self.ser = serial.Serial('COM9', baudrate=9600, timeout=1)
defrun(self):
whileTrue:
dato = self.ser.readline().decode('ascii')
if dato != "":
QtCore.QMetaObject.invokeMethod(self.w, "setValues",
QtCore.Qt.QueuedConnection,
QtCore.Q_ARG(str, dato))
QtCore.QThread.msleep(10)
classMyApp(QtWidgets.QMainWindow, Ui_MainWindow):
def__init__(self):
QtWidgets.QMainWindow.__init__(self)
self.setupUi(self)
runnable = SerialRunnable(self)
QtCore.QThreadPool.globalInstance().start(runnable)
@QtCore.pyqtSlot(str)defsetValues(self, dato):
estudiantes.insert(0,dato)
estudiantes.pop()
self.Box1.setText(estudiantes[0])
self.Box2.setText(estudiantes[1])
self.Box3.setText(estudiantes[2])
self.Box4.setText(estudiantes[3])
Post a Comment for "Pyqt5 - Automate Serial Module"