PyQt5 QSerialPort子线程操作的实现
作者:云中虾 发布时间:2023-08-21 13:07:28
标签:PyQt5,QSerialPort,子线程
环境:
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,哈哈
来源:http://www.cnblogs.com/wangmantou/p/8901483.html
0
投稿
猜你喜欢
- 本文实例讲述了php实现在服务器端调整图片大小的方法。分享给大家供大家参考。具体分析如下:在服务器端完成图片大小的调整,会比在浏览器的处理有
- 本文实例为大家分享了使用python3制作的表白神器,供大家参考,具体内容如下使用python3制作的小玩意,哪里需要改造的,望各位评论一下
- 本文实例讲述了PHP封装的PDO数据库操作类。分享给大家供大家参考,具体如下:<?phpclass DatabaseHandler {
- 在使用数据库的时候,难免要在使用过程中进行删除的操作,如果是使用int类型的字段,令其自增长,这是个最简单的办法,但是后果会有些不是你想要的
- 一起画图吧为什么突然想搞这个画图软件呢不瞒各位,是因为最近接到了一个很小很小很小小得不能再小的小项目就是基于Tkinter,做一个简易的画图
- scipy.interpolate插值方法1 一维插值from scipy.interpolate import interp1d1维插值算
- 一、PillowPIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但
- 简介黑洞图像大家都知道,毕竟前几年刚发布的时候曾火遍全网,甚至都做成表情包了。问题在于,凭什么认为这就是黑洞的照片,而不是一个甜甜圈啥的给整
- binlog 就是binary log,二进制日志文件,这个文件记录了mysql所有的dml操作。通过binlog日志我们可以做数据恢复,做
- 基础这个模块是socket的异步实现,让我们先来熟悉一下模块中的一些类和方法:1.asyncore.loop输入一个轮询循环直到通过计数或打
- 代码演示暴力破解MSSQL的帐号和密码,包括管理员帐号sa的密码。网上有SQL Server Sa密码破解的存储过程,方法就是暴力破解MSS
- 我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。感知器学习算法很容易实现,但为了节省时间
- 实例如下所示:import matplotlib as mtimport numpy as np y=[7,0,0,0,0,0,1,25,9
- 一、pexpect模块介绍Pexpect使Python成为控制其他应用程序的更好工具。可以理解为Linux下的expect的Python封装
- 简介可以考虑以下几个可能的应用:如果你需要对文件进行校验或验证,你可以使用MD5码来检查文件是否被篡改或损坏。如果你需要对文件进行分类或去重
- 前提搭建钉钉应答机器人,需要先准备或拥有以下权限:钉钉企业的管理员或子管理员(如果不是企业管理员,可以自己创建一个企业,很方便的)有公网通信
- Oblog4.6 ACCESS版转换为UCenterHome1.5的全过程1、 说明:
- 本文实例讲述了Python实现求解一元二次方程的方法。分享给大家供大家参考,具体如下:1. 引入math包2. 定义返回的对象3. 判断b*
- 用户界面和用户体验(UI/UX)是任何产品成败的关键,尤其 Web,Web 是一种公开的,可以被任何人随时随地访问的特殊产品,用户的体验几乎
- 网上大部分的免费asp程序使用的是access数据库。但是access数据库作为一个中小型的单机数据库系统,在承担访问量、数据量大的网站应用