PyQt5 QSerialPort子线程操作的实现

作者:云中虾 时间:2023-08-21 13:07:28 

环境:

python3.6 pyqt5

只是简单的一个思路,请忽略脆弱的异常防护:


# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo
from PyQt5.QtCore import pyqtSignal, QThread, QObject, QTimer
class SerialWork(QObject):
 def __init__(self):
   super().__init__()

def init(self):
   self.com = QSerialPort()
   self.com.setPortName('COM7')
   self.com.setBaudRate(115200)
   if self.com.open(QSerialPort.ReadWrite) == False:
     return
   self.readtimer = QTimer()
   self.readtimer.timeout.connect(self.readData)
   self.readtimer.start(100)

def readData(self):
   revData = self.com.readAll()
   revData = bytes(revData)
   print('%d read' % len(revData))

class PyQt_Serial(QWidget):
 def __init__(self):
   super().__init__()
   self.serialthread = QThread()
   self.serialwork = SerialWork()
   self.serialwork.moveToThread(self.serialthread)
   self.serialthread.started.connect(self.serialwork.init)
   self.serialthread.start()

if __name__ == '__main__':
 app = QApplication(sys.argv)
 win = PyQt_Serial()
 win.show()
 sys.exit(app.exec_())

需要注意的地方:

1、对QSerialPort的读写操作需要在同一个线程,不能跨线程操作

2、serialwork内不能有死循环,原因可能是死循环阻塞了串口接收事件的传递,导致readall函数一直读不到数据。如果非要加入死循环,在循环内加入QApplication.processEvents()可以读到串口数据

3、通过这次子线程操作QSerialPort的例程大致了解了两种QThread使用的阵营:run和moveToThread,哈哈

来源:http://www.cnblogs.com/wangmantou/p/8901483.html

标签:PyQt5,QSerialPort,子线程
0
投稿

猜你喜欢

  • 基于tensorflow for循环 while循环案例

    2022-01-26 14:40:34
  • Python3开发环境搭建详细教程

    2023-11-12 10:46:28
  • Golang如何编写内存高效及CPU调优的Go结构体

    2024-04-23 09:45:55
  • Python的高级Git库 Gittle

    2023-06-14 14:52:05
  • Golang websocket协议使用浅析

    2024-02-07 14:19:28
  • Python曲线拟合详解

    2023-12-29 05:54:50
  • Vue.js实现微信过渡动画左右切换效果

    2023-07-02 17:03:10
  • MySQL外键约束详解

    2024-01-28 11:30:00
  • 关于golang 字符串 int uint int64 uint64 互转问题

    2023-07-13 17:52:44
  • 基于Python实现全自动下载抖音视频

    2023-03-20 13:14:18
  • Go 语言数组和切片的区别详解

    2024-04-25 15:08:37
  • 如何利用Python模拟GitHub登录详解

    2023-11-18 11:08:05
  • asp伪继承初探_实例代码

    2011-04-19 10:32:00
  • python实现批量修改服务器密码的方法

    2021-09-11 01:23:09
  • Python实现读取字符串按列分配后按行输出示例

    2023-08-07 19:39:14
  • ASP生成静态模版技术(带参数的标签)

    2009-03-03 12:29:00
  • python直接访问私有属性的简单方法

    2022-09-18 12:03:47
  • 详解python数据结构之栈stack

    2023-02-12 17:48:56
  • Python实现爬取网页中动态加载的数据

    2021-08-11 18:35:27
  • vue 自定义全局方法,在组件里面的使用介绍

    2024-05-29 22:46:17
  • asp之家 网络编程 m.aspxhome.com