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中针对函数处理的特殊方法
Mar 06 Python
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
Python绘制正余弦函数图像的方法
Aug 28 Python
Python编程深度学习计算库之numpy
Dec 28 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
Jul 25 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
Python3.9又更新了:dict内置新功能
Feb 28 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 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
PHP的Yii框架的基本使用示例
2015/08/21 PHP
初识PHP中的Swoole
2016/04/05 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
JS检测输入字符是否包含非法字符的示例代码
2014/02/11 Javascript
JS实现两个大数(整数)相乘
2014/04/28 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
angularjs实现时间轴效果的示例代码
2017/11/29 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Python中的lstrip()方法使用简介
2015/05/19 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
Python读取word文本操作详解
2018/01/22 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
普通院校学生的自荐信
2013/11/27 职场文书
护士的岗位职责
2013/12/04 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
公务员个人考察材料
2014/12/23 职场文书
合理化建议书范文
2015/09/14 职场文书
Angular性能优化之第三方组件和懒加载技术
2021/05/10 Javascript
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python