PyQt5 QSerialPort子线程操作的实现


Posted in Python onApril 21, 2018

环境:

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,哈哈

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
介绍Python的Django框架中的静态资源管理器django-pipeline
Apr 25 Python
Python实现截屏的函数
Jul 25 Python
python实现简单点对点(p2p)聊天
Sep 13 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
python2与python3共存问题的解决方法
Sep 18 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
python读出当前时间精度到秒的代码
Jul 05 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
python实现UDP协议下的文件传输
Mar 20 Python
将python代码和注释分离的方法
Apr 21 #Python
Python基于百度AI的文字识别的示例
Apr 21 #Python
python实现随机调用一个浏览器打开网页
Apr 21 #Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 #Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 #Python
Django项目实战之用户头像上传与访问的示例
Apr 21 #Python
基于Python 装饰器装饰类中的方法实例
Apr 21 #Python
You might like
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
PHP基于openssl实现非对称加密代码实例
2020/06/19 PHP
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
javascript 分号总结及详细介绍
2016/09/24 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
对angular4子路由&辅助路由详解
2018/10/09 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
2020/02/15 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python扩展内置类型详解
2018/03/26 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
3分钟学会一个Python小技巧
2018/11/23 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
python实现批量命名照片
2020/06/18 Python
Python利用命名空间解析XML文档
2020/08/10 Python
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
创业计划书如何编写
2014/02/06 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
通知书大全
2015/04/27 职场文书
担保贷款承诺书
2015/04/30 职场文书
老公出轨后的保证书
2015/05/08 职场文书
二审代理词范文
2015/05/25 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
Go语言grpc和protobuf
2022/04/13 Golang