Я пишу простое приложение, использующее 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_()