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之眼花缭乱的运算符
Sep 14 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
Python GUI Tkinter简单实现个性签名设计
Jun 19 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
python 返回列表中某个值的索引方法
Nov 07 Python
图文详解python安装Scrapy框架步骤
May 20 Python
python 穷举指定长度的密码例子
Apr 02 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
Python如何读取、写入JSON数据
Jul 28 Python
Python读取文件夹下的所有文件实例代码
Apr 02 Python
python井字棋游戏实现人机对战
Apr 28 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入门
2006/10/09 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
PHP排序算法类实例
2015/06/17 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
Mac系统下安装PHP Xdebug
2018/03/30 PHP
javascript 命名规则 变量命名规则
2010/02/25 Javascript
JavaScript全排列的六种算法 具体实现
2013/06/29 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
python判断端口是否打开的实现代码
2013/02/10 Python
基于Python的接口测试框架实例
2016/11/04 Python
Python max内置函数详细介绍
2016/11/17 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
法国时尚童装网站:Melijoe
2016/08/10 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
物流管理专业毕业生求职信
2014/03/23 职场文书
文化建设工作方案
2014/05/12 职场文书
希特勒的演讲稿
2014/05/23 职场文书
A22国内电台短波广播频率表
2022/05/10 无线电
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS