Estoy escribiendo una aplicación simple que usa PyQT5 para leer datos del puerto serie, pero readyRead no se emite cuando se reciben datos del puerto serie.

Si la aplicación está bloqueada por waitForReadyRead() dataReady() se llama cuando se reciben datos.

Usando Windows 10 con Python 3.7.4, PyQt5 5.13.1

Código mínimo para reproducir el problema:

from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget
from PyQt5.QtWidgets import QMainWindow, QLabel
from PyQt5.QtCore import Qt, QIODevice
from PyQt5.QtSerialPort import QSerialPort
import sys


class ExampleGUI(QMainWindow):
    def __init__(self):
        super().__init__()

        #self.setGeometry(50,50,500,300)
        self.setWindowTitle("Example")

        # Start mainLayout
        self.mainLayout = QVBoxLayout()

        serialLabel = QLabel("Example program")
        self.mainLayout.addWidget(serialLabel)

        widget = QWidget()
        widget.setLayout(self.mainLayout)
        self.setCentralWidget(widget)

        self.serPort = QSerialPort()
        self.serPort.readyRead.connect(self.dataReady)
        self.serPort.setPortName("COM4")
        self.serPort.setBaudRate(9600)
        self.serPort.open(QIODevice.ReadWrite)
        self.serPort.writeData("Hi".encode())
        # self.serPort.waitForReadyRead()

    def dataReady(self):
        print(bytes(self.serPort.readAll()))


if __name__ == '__main__':
    app = QApplication([])
    gui = ExampleGUI()
    gui.show()
    app.exec_()
0
Matas Razgūnas 27 oct. 2019 a las 17:28

1 respuesta

La mejor respuesta