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和OpenCV库将URL转换为OpenCV格式的方法
Mar 27 Python
举例介绍Python中的25个隐藏特性
Mar 30 Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
Django的信号机制详解
May 05 Python
pycham查看程序执行的时间方法
Nov 29 Python
python2.7使用plotly绘制本地散点图和折线图
Apr 02 Python
selenium处理元素定位点击无效问题
Jun 12 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
python爬虫开发之selenium模块详细使用方法与实例全解
Mar 09 Python
python实现五子棋程序
Apr 24 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
Jul 21 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
日本十大惊悚动漫
2020/03/04 日漫
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
php文件缓存方法总结
2016/03/16 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
extJs 下拉框联动实现代码
2010/04/09 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
jquery html动态添加的元素绑定事件详解
2016/05/24 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
Vue 实例事件简单示例
2019/09/19 Javascript
vue打包npm run build时候界面报错的解决
2020/08/13 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
Python函数式编程
2017/07/20 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
历史专业大学生职业生涯规划书
2014/03/13 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
体育个人工作总结
2015/02/09 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
python编写五子棋游戏
2021/05/25 Python
解决persistence.xml配置文件修改存放路径的问题
2022/02/24 Java/Android