首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只有在app被QSerialPort ()阻塞时才发出readyRead信号

只有在app被QSerialPort ()阻塞时才发出readyRead信号
EN

Stack Overflow用户
提问于 2019-10-27 14:28:46
回答 1查看 2K关注 0票数 0

我正在编写使用PyQT5从串口读取数据的简单应用程序,但是当从串口接收数据时不会发出readyRead

如果应用程序被waitForReadyRead()阻塞,则在接收数据时调用dataReady()

在Python3.7.4,PyQt5 5.13.1中使用Windows 10

再现问题的最小代码:

代码语言:javascript
运行
复制
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_()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-27 17:55:56

似乎是Qt https://bugreports.qt.io/browse/QTBUG-78086中的错误。使用较早的5.13.0版本解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58580286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档