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 相关文章推荐
Django中对通过测试的用户进行限制访问的方法
Jul 23 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
python使用锁访问共享变量实例解析
Feb 08 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
Jun 21 Python
python 内置函数汇总详解
Sep 16 Python
python图形用户接口实例详解
Dec 16 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
Pytorch释放显存占用方式
Jan 13 Python
TensorFlow tensor的拼接实例
Jan 19 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 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用户指南-cookies部分
2006/10/09 PHP
php支付宝接口用法分析
2015/01/04 PHP
php制作简单模版引擎
2016/04/07 PHP
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
js判断文件格式及大小的简单实例(必看)
2016/10/11 Javascript
react路由配置方式详解
2017/08/07 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
[19:59]2014DOTA2国际邀请赛 IG战队纪录片
2014/08/07 DOTA
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
python psutil模块使用方法解析
2019/08/01 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
Django 允许局域网中的机器访问你的主机操作
2020/05/13 Python
keras使用Sequence类调用大规模数据集进行训练的实现
2020/06/22 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
职称自我鉴定
2013/10/15 职场文书
英文自荐信
2013/12/19 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
2015年社区计生工作总结
2015/04/21 职场文书
同意落户证明
2015/06/19 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android