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创建列表并给列表赋初始值的方法
Jul 28 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
浅谈Django REST Framework限速
Dec 12 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
对pandas的算术运算和数据对齐实例详解
Dec 22 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 Python
MATLAB数学建模之画图汇总
Jul 16 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 Python
python入门学习关于for else的特殊特性讲解
Nov 20 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 UTF8 文件的签名问题
2009/10/30 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
分析了一下JQuery中的extend方法实现原理
2015/02/27 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python面试题小结附答案实例代码
2019/04/11 Python
Python画图高斯分布的示例
2019/07/10 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
html5 标签
2009/07/16 HTML / CSS
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
教师四风问题整改措施
2014/09/25 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
2015年大学生实习评语
2015/03/25 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
初中班主任工作随笔
2015/08/15 职场文书