QSerialPort readyRead 信号仅在应用程序被 waitForReadyRead() 阻塞时发出
QSerialPort readyRead signal only emitted when app is blocked by waitForReadyRead()
我正在使用 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_()
看来这是 Qt 中的错误 https://bugreports.qt.io/browse/QTBUG-78086。使用旧版本 5.13.0 可以解决问题。
我正在使用 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_()
看来这是 Qt 中的错误 https://bugreports.qt.io/browse/QTBUG-78086。使用旧版本 5.13.0 可以解决问题。