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.time_flush_timer.timeout.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)

        self.tool_thread.find_com_timer.start(1000)

        self.tool_thread.time_flush_timer.start(1000)

        print("main_thread",QThread.currentThread())


    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.tool_thread.loop_send_timer.start(intv)
                    else:
                        QMessageBox.critical(self,'提示',"正确的阿拉伯数字")
                        return None

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



    def timeFlush(self):
        current_time = time.strftime("%Y-%m-%d %X", time.localtime())
        self.ui.label_14.setText("   " + current_time)




    def get_com_name(self):
        com = self.ui.comboBox_Com.currentText()
        com = com.split(":")[0].strip()
        return com

    def openXclose_Com(self):
        if self.ui.pushButton_open.text() == "打开串口" and self.ui.comboBox_Com.currentText() != "无串口" :

            self.ui.pushButton_open.setText("关闭串口")

            self.tool_thread.find_com_timer.stop()

            com_name = self.get_com_name()

            band = self.ui.comboBox_Bate.currentText()
            data_bit = self.ui.comboBox_DataBit.currentText()
            check_bit = self.ui.comboBox_CheckBit.currentText()
            stop_bit = self.ui.comboBox_StopBit.currentText()

            self.tool_thread.dic_item['com'] = com_name
            self.tool_thread.dic_item['band'] = band
            self.tool_thread.dic_item['data_bit'] = data_bit
            self.tool_thread.dic_item['check_bit'] = check_bit
            self.tool_thread.dic_item['stop_bit'] = stop_bit
            print(self.tool_thread.dic_item)

            self.tool_thread.openComSignal.emit()

            print("mant-",QThread.currentThread())

            self.tool_thread.tool_receive_timer.start(5)

            # QThread.msleep(100)
            #
            # # ts = self.tool_thread.openCom()
            # if self.tool_thread.serialTool.is_open:
            #


            if self.tool_thread.ts =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值