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爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
新手入门Python编程的8个实用建议
Jul 12 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
Python Pandas数据中对时间的操作
Jul 30 Python
用Python画小女孩放风筝的示例
Nov 23 Python
flask框架url与重定向操作实例详解
Jan 25 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
Feb 05 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
Python动态强类型解释型语言原理解析
Mar 25 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 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自动选择 连接本地还是远程数据库
2010/12/02 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
jquery读取xml文件实现省市县三级联动的方法
2015/05/29 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
AngularJS中的Promise详细介绍及实例代码
2016/12/13 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
零基础轻松学JavaScript闭包
2016/12/30 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
windows支持哪个版本的python
2020/07/03 Python
python 装饰器的使用示例
2020/10/10 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
俞敏洪励志演讲稿
2014/04/29 职场文书
安全教育演讲稿
2014/05/09 职场文书
初中教师业务学习材料
2014/05/12 职场文书
2014年招商引资工作总结
2014/11/22 职场文书
求职自荐信怎么写
2015/03/04 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
纪律委员竞选稿
2015/11/19 职场文书
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis
源码安装apache脚本部署过程详解
2022/09/23 Servers