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 BeautifulSoup使用方法详解
Nov 21 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
python 用下标截取字符串的实例
Dec 25 Python
Python实现查找二叉搜索树第k大的节点功能示例
Jan 24 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 Python
python 如何做一个识别率百分百的OCR
May 29 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 基于文件头的文件类型验证类函数
2012/05/01 PHP
php操作xml入门之xml基本介绍及xml标签元素
2015/01/23 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
2014/10/17 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python的即时标记项目练习笔记
2014/09/18 Python
Python入门篇之字符串
2014/10/17 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
Python编程实现正则删除命令功能
2017/08/30 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
python不同系统中打开方法
2020/06/23 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
研究生毕业鉴定
2014/01/29 职场文书
简历中的自我评价怎么写
2014/01/29 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
创先争优一句话承诺
2014/05/29 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
婚礼新人答谢词
2015/01/04 职场文书
2016年班主任新年寄语
2015/08/18 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技