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之有容乃大的list(2)
Sep 15 Python
python中常用的九种预处理方法分享
Sep 11 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 Python
python+OpenCV实现图像拼接
Mar 05 Python
通俗易懂了解Python装饰器原理
Sep 17 Python
Python爬虫简单运用爬取代理IP的实现
Dec 01 Python
python如何构建mock接口服务
Jan 28 Python
python如何修改文件时间属性
Feb 05 Python
分享提高 Python 代码的可读性的技巧
Mar 03 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
Codeigniter实现多文件上传并创建多个缩略图
2014/06/12 PHP
PHP实现GIF图片验证码
2015/11/04 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
python二叉树的实现实例
2013/11/21 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
Django框架多表查询实例分析
2018/07/04 Python
Python面向对象之反射/自省机制实例分析
2018/08/24 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
python将视频转换为全字符视频
2019/04/26 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
体育教育毕业生自荐信
2013/11/21 职场文书
教师年度考核自我鉴定
2014/01/19 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
给老婆的保证书
2015/01/16 职场文书
swagger如何返回map字段注释
2021/07/03 Java/Android