是否可以在没有 GUI 或类的情况下使用 PyQt5 QtSerialPort?

Posted

技术标签:

【中文标题】是否可以在没有 GUI 或类的情况下使用 PyQt5 QtSerialPort?【英文标题】:Is it possible to use PyQt5 QtSerialPort without GUI's or classes? 【发布时间】:2021-03-10 17:07:04 【问题描述】:

关键是只有在有要阅读的内容时才具有阅读功能,而不是使用没有特殊方法的pyserial。我想这可能会涉及一个更大的问题,即信号和插槽是否可以在没有 GUI 类(从其他对象继承)的情况下使用。我可以让串口写入,但不能读取,用

from PyQt5 import QtCore, QtSerialPort
serial_port = QtSerialPort.QSerialPort('COM3')
serial_port.open(QtCore.QIODevice.ReadWrite)
serial_port.write(bytes([255]))

def handle_ready_read():
    while serial_port.canReadLine():
        print(serial_port.readAll())
        print('here')
        serial_port.close()

serial_port.readyRead.connect(handle_ready_read)

即使在使用 pyserial 时读取了某些内容,也不会打印任何内容。

【问题讨论】:

【参考方案1】:

你不需要 GUI 来使用 Qt。 Qt 中有一个专用的GUI module,不依赖它的东西,也不需要 GUI。

但是,要使用槽和信号,您需要运行 Qt 的事件循环。常规方法是使用QCoreApplication

app = QCoreApplication([])

# setup your serial port here

sys.exit(app.exec_())

【讨论】:

好的,我需要在循环的末尾添加 app.quit() 以结束 - 在最底部添加似乎不会结束应用程序。 事件循环的概念是由无限期等待事件的想法驱动的,所以app.exec_()应该只在所有工作完成后才返回。这意味着如果您需要退出应用程序,则需要在调用 exec_() 之前实现将发出信号的逻辑。

以上是关于是否可以在没有 GUI 或类的情况下使用 PyQt5 QtSerialPort?的主要内容,如果未能解决你的问题,请参考以下文章

PyQt:如何在不冻结 GUI 的情况下更新进度?

是否可以从 PyQt5 中的线程获取数组?

如何使 pyqt gui 刷新

如何在不关闭 GUI 窗口的情况下停止运行 PyQt5 程序?

如何使用 jquery 从没有任何 id 或类的 div 中删除锚标记?

Pygame - 没有 Sprite 或类的子弹和敌人碰撞