QSerialPort readyRead сигнал испускается только тогда, когда приложение заблокировано waitForReadyRead () - PullRequest
0 голосов
/ 27 октября 2019

Я пишу простое приложение, использующее PyQT5 для чтения данных из последовательного порта, но readyRead не отправляется при получении данных из последовательного порта.

Если приложение заблокировано waitForReadyRead() dataReady()вызывается при получении данных.

Использование Windows 10 с Python 3.7.4, PyQt5 5.13.1

Минимальный код для воспроизведения проблемы:

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_()

1 Ответ

0 голосов
/ 27 октября 2019

Похоже, что это ошибка в Qt https://bugreports.qt.io/browse/QTBUG-78086. Использование более старой версии 5.13.0 решает проблему.

...