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引用DLL文件的方法
May 11 Python
python3读取MySQL-Front的MYSQL密码
May 03 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
flask入门之表单的实现
Jul 18 Python
python3实现多线程聊天室
Dec 12 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
django解决跨域请求的问题详解
Jan 20 Python
Python3.4解释器用法简单示例
Mar 22 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
python实现视频分帧效果
May 31 Python
新年福利来一波之Python轻松集齐五福(demo)
Jan 20 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 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数据库连接
2006/10/09 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
PHP文件与目录操作示例
2016/12/24 PHP
详细解读php的命名空间(一)
2018/02/21 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
基于json的jquery地区联动效果代码
2011/07/06 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
2014/12/16 Javascript
基于jQuery插件实现环形图标菜单旋转切换特效
2015/05/15 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
原生JS实现九宫格抽奖
2020/09/13 Javascript
Python实现字符串格式化的方法小结
2017/02/20 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
大学生上课迟到检讨书
2014/10/15 职场文书
老干部工作汇报材料
2014/10/28 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
董事长新年致辞
2015/07/29 职场文书