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局域网ip扫描示例分享
Apr 03 Python
简单的抓取淘宝图片的Python爬虫
Dec 25 Python
Python多线程编程(八):使用Event实现线程间通信
Apr 05 Python
Python中如何优雅的合并两个字典(dict)方法示例
Aug 09 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
Python设计密码强度校验程序
Jul 30 Python
Python Charles抓包配置实现流程图解
Sep 29 Python
教你利用Selenium+python自动化来解决pip使用异常
May 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实现的memcache环形队列类实例
2015/07/28 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
Vue2单一事件管理组件通信
2017/05/09 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
javascript实现的时间格式加8小时功能示例
2019/06/13 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
如何在vue中使用video.js播放m3u8格式的视频
2021/02/01 Vue.js
解读! Python在人工智能中的作用
2017/11/14 Python
Win8下python3.5.1安装教程
2020/07/29 Python
详解python调用cmd命令三种方法
2019/07/08 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
Django 自定义分页器的实现代码
2019/11/24 Python
Python实现直播推流效果
2019/11/26 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
python源文件的字符编码知识点详解
2021/03/04 Python
美国网上眼镜供应商:LEOTONY(眼镜、RX太阳镜和太阳镜)
2017/10/31 全球购物
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
优秀体育委员自荐书
2014/01/31 职场文书
八一建军节感言
2014/02/28 职场文书
社会实践评语
2014/04/28 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
实习单位指导教师评语
2014/12/30 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
《山中访友》教学反思
2016/02/24 职场文书
修改MySQL的默认密码的四种小方法
2021/05/26 MySQL
CentOS安装Nginx并部署vue
2022/04/12 Servers
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技