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脚本
Sep 01 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
Python决策树分类算法学习
Dec 22 Python
python基于twisted框架编写简单聊天室
Jan 02 Python
tensorflow入门之训练简单的神经网络方法
Feb 26 Python
Python中存取文件的4种不同操作
Jul 02 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
Python3如何在Windows和Linux上打包
Feb 25 Python
Django ValuesQuerySet转json方式
Mar 16 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
python中执行smtplib失败的处理方法
Jul 01 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
IE8 中使用加速器(Activities)
2010/05/14 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
浅谈js中的this问题
2017/08/31 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
重新认识vue之事件阻止冒泡的实现
2018/08/02 Javascript
解决vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效问题
2018/08/24 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
vantUI 获得piker选中值的自定义ID操作
2020/11/04 Javascript
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
Python3爬楼梯算法示例
2019/03/04 Python
如何通过Python实现标签云算法
2019/07/02 Python
python实现图片上添加图片
2019/11/26 Python
Python @property及getter setter原理详解
2020/03/31 Python
如何理解python对象
2020/06/21 Python
迪梵英国官方网站:Darphin英国
2017/12/06 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
汽车检测与维修专业求职信
2013/10/30 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
三严三实对照检查材料
2014/09/22 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers
MongoDB数据库之添删改查
2022/04/26 MongoDB