pyqt5工具,利用多线程提升响应速度

在上周,使用PyQT5制作了一个串口工具,但是长时间运行时,发现会出现卡顿情况,因此,今天着手采用多线程,进行重新调整,目前窗口打开速度明显提升。其余改动在后续逐步完成。


import configparser
import time
import datetime
from PyQt5  import QtWidgets
from PyQt5.QtGui import QTextCursor
from PyQt5.QtWidgets import QApplication, QMessageBox
import sys
import os
from uartToolWindow import Ui_Form
from PyQt5.QtCore import QTimer,QObject,pyqtSignal,QThread
import crc
import re
from uart_tool_thread import UartToolThreadClass





class uart_window(QtWidgets.QWidget):

    def __init__(self):
        super().__init__()



        self.ui = Ui_Form()
        self.ui.setupUi(self)

        self.windowInit()
        self.cfg_init()
        self.connectInit()

        self.tool_thread = UartToolThreadClass()
        self.child_thread = QThread()
        self.tool_thread.moveToThread(self.child_thread)

        self.child_thread.start()
        self.tool_thread.startSignal.connect(self.tool_thread.toolInit)
        self.tool_thread.startSignal.emit()

        self.tool_thread.openComSignal.connect(self.tool_thread.openCom)
        self.tool_thread.offComSignal.connect(self.tool_thread.offCom)
        self.tool_thread.sendSignal.connect(self.tool_thread.sendData)

        self.tool_thread.errSignal.connect(self.windowTs)
        self.tool_thread.showOffUartSignal.connect(self.openButtonShowChange)
        self.tool_thread.showRevDataSignal.connect(self.receive_data)
        self.tool_thread.showTimeSignal.connect(self.timeFlush)
        # self.tool_thread.showComSignal.connect(self.tool_thread.tsearchCom)

        self.tool_thread.loop_send_timer.timeout.connect(self.send_Data)

        self.tool_thread.tool_receive_timer.timeout.connect(self.receive_data)

        self.tool_thread.find_com_timer.timeout.connect(self.searchCom)





    def windowTs(self,item):
        QMessageBox.critical(item)
        return None

    def openButtonShowChange(self,item):
        self.ui.pushButton_open.setText(item)

    def loop_send(self):
        if self.ui.checkBox_Sendinterval.isChecked():

            if self.ui.textEdit.toPlainText() == "":
                QMessageBox.critical(self, "提示", '发送内容为空!')
                self.ui.checkBox_Sendinterval.setChecked(False)
                return None
            else:

                if self.ui.lineEdit_intervalValue.text() == "":

                    QMessageBox.critical(self,"提示",'请填入发送间隔,单位为毫秒!')
                    return None

                else:

                    self.ui.pushButton_4.setEnabled(False)

                    intv = int(self.ui.lineEdit_intervalValue.text())

                    if self.ui.lineEdit_intervalValue.text().isdigit() and intv > 0:

                        self.loop_send_timer.start(intv)
                    else:
                        QMessageBox.critical(self,'提示',"正确的阿拉伯数字")
                        return None

        else:
            self.ui.pushButton_4.setEnabled(True)
            self.loop_send_timer.stop()





    def receive_data(self,item):

        timeFontFormat = '<font color="red" size="2">{}</font>'
        contentFontFormat = '<font color="black" size="2">{}</font>'


        data  = item
        num = len(data)
        self.ui.textBrowser_Ellis.append(f"接收:{num}个数据")
        self.ui.textBrowser_Ellis.moveCursor(QTextCursor.End)
        rev_string = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
        self.ui.textBrowserRev.append("\n")
        self.ui.textBrowserRev.append(timeFontFormat.format(rev_string+":"))

        if self.ui.checkBox_hexShow.isChecked():
            rev = ""
            for i in range(0,len(data)):
                rev= rev +"收 " + '{:02X}'.format(data[i]) + "  "
            self.ui.textBrowserRev.append(contentFontFormat.format(rev))
            self.ui.textBrowserRev.moveCursor(QTextCursor.End)
        else :
            try:
                rev_data = data.decode("utf-8")
            except :

                QMessageBox.critical(self,"提示",'请选择正确波特率!')
                self.ui.pushButton_open.setText('打开串口')
                self.tool_receive_timer.stop()
                self.serialTool.close()
                return None

            else:

                self.ui.textBrowserRev.append(contentFontFormat.format("收: "+ rev_data))
                self.ui.textBrowserRev.moveCursor(QTextCursor.End)





    def timeFlush(self):
        current_time

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值