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 中的列表解析和生成表达式
Mar 10 Python
python删除特定文件的方法
Jul 30 Python
python爬取NUS-WIDE数据库图片
Oct 05 Python
python基于物品协同过滤算法实现代码
May 31 Python
python 快速把超大txt文件转存为csv的实例
Oct 26 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
matplotlib.pyplot画图并导出保存的实例
Dec 07 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 Python
Python基于network模块制作电影人物关系图
Jun 19 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 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
网页游戏开发入门教程二(游戏模式+系统)
2009/11/02 PHP
PHP header()函数使用详细(301、404等错误设置)
2013/04/17 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
JavaScript"模拟事件"的注意要点详解
2019/02/13 Javascript
Vue实现日历小插件
2019/06/26 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
解决vue项目获取dom元素宽高总是不准确问题
2020/07/29 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
Python中内建函数的简单用法说明
2016/05/05 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
Python如何输出整数
2020/06/07 Python
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
高三上学期学习自我评价
2014/04/23 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
表扬信范文
2015/05/04 职场文书
2015年六一儿童节活动方案
2015/05/05 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题