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 CSV模块使用实例
Apr 09 Python
Python爬虫模拟登录带验证码网站
Jan 22 Python
Python中列表元素转为数字的方法分析
Jun 14 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
django 创建过滤器的实例详解
Aug 14 Python
numpy中的高维数组转置实例
Apr 17 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
Python实现微信小程序支付功能
Jul 25 Python
django在开发中取消外键约束的实现
May 20 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
Nov 17 Python
python 通过exifread读取照片信息
Dec 24 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 输出缓存详解
2009/06/20 PHP
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
php读取csc文件并输出
2015/05/21 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
Vue编写多地区选择组件
2017/08/21 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
python搭建简易服务器分析与实现
2012/12/15 Python
Python实现定时任务
2017/02/08 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
Python常用断言函数实例汇总
2020/11/30 Python
python中if嵌套命令实例讲解
2021/02/25 Python
分享29个基于Bootstrap的HTML5响应式网页设计模板
2015/11/19 HTML / CSS
天网面试题
2013/04/07 面试题
linux面试题参考答案(11)
2012/05/01 面试题
《伯牙绝弦》教学反思
2014/03/02 职场文书
学雷锋月活动总结
2014/04/25 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
党员承诺书格式
2014/05/21 职场文书
财务部岗位职责
2015/02/03 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
全新239军机修复记
2022/04/05 无线电