python+PyQt5 左右声道测试

news2024/12/29 13:09:25

UI:

源代码:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'MicrophoneWinFrm.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
from PyQt5 import QtWidgets
from PyQt5 import QtGui
from PyQt5 import QtCore
import logging
import os
import json
import configparser
from PyQt5.QtCore import pyqtSignal
import sys
import random#随机数
import subprocess
import inspect
from subprocess import Popen,PIPE
from colorama import Fore,Style
import re
#pip install colorama
import pygame
#pip install pygame

class Mic_ChannelTest(QtCore.QThread):
    test_result_signal = QtCore.pyqtSignal(tuple)  # 新增信号,传递一个包含设备路径和测试结果的元组
    finished_signal = QtCore.pyqtSignal()  # 新增信号,表示线程完成

    def __init__(self, parent=None):
        super(Mic_ChannelTest, self).__init__(parent)
        self.is_running=True

    def run(self):
        self.parent().test_AudioChannel()#启动多线程
        self.finished_signal.emit()#线程完成时发出信号
        self.stop()

    def stop(self):
        self.is_running = False # 或者使用更安全的停止逻辑

class Ui_Form(QWidget):
    updateTimer = pyqtSignal(bool)  # 时间线程启动器
    def __init__(self):
        super().__init__()
        self.config = configparser.ConfigParser()  # 创建对象
        self.itemName = ''  # 项目名称
        self.testArgs = []  # 测试参数信息
        self.testStandardArgs = ''  # 测试准标参数
        self.Err = ''  # 错误信息
        self.cfgArgs = []  # 測試參數
        self.leftChannel_TestPass=False#左声道测试
        self.rigthChannel_TestPass=False#右声道测试
        self.leftChannelSoundFile=''#左声道音频文件
        self.rightChannelSoundFile=''#右声道音频文件
        self.nowTest='leftChannel'#默认左声道测试
        self.randNum=1#随机数

        # 生成日志信息
        self.logger = logging.getLogger('my_logger')  # 步骤1 创建日志记录器
        self.logger.setLevel(logging.DEBUG)  # 步骤2 将指定日志级别
        self.file_handler = logging.FileHandler('./log/log.txt')  # 步骤3 创建文件处理器
        self.formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')  # 步骤4 创建格式化器
        self.file_handler.setFormatter(self.formatter)  # 步骤4 将格式化器添加到处理器
        self.logger.addHandler(self.file_handler)  # 步骤5 将处理器添加到日志记录器

        # 读取配置
        self.config.read('./Conf/config.conf', encoding='utf-8')  # 读取配置文件,如果配置文件不存在则创建

        #左右声道音频文件
        self.leftChannelSoundFile=self.config.get('MicrophoneConfig','LeftChannel')#左声道音频文件
        self.rightChannelSoundFile=self.config.get('MicrophoneConfig','RightChannel')#右声道音频文件

        # 读取测试配置
        self.itemName = self.config.get('TestItemNameArrays', 'MicTest')  # 项目名称
        self.itemFailSleepExit = int(self.config.get('TestItemWinFrmSleepExit', 'MicTest'))  # 项目测试Fail延时退出
        self.testArgs.clear()
        self.testArgs = self.ReadJsonInfo('./Conf/TestArgs.json')  # 读取测试参数信息

        self.setupUi()
        self.lbl_CurrentSwTest.setText('读取配置信息...')

        #将变量添加到容器中
        self.left_buttons = [self.bp_Left_1,self.bp_Left_2,self.bp_Left_3,self.bp_Left_4,self.bp_Left_5,self.bp_Left_6,self.bp_Left_7,self.bp_Left_8]#左声道控件
        self.right_buttons=[self.bp_Rigth_1,self.bp_Rigth_2,self.bp_Rigth_3,self.bp_Rigth_4,self.bp_Rigth_5,self.bp_Rigth_6,self.bp_Rigth_7,self.bp_Rigth_8]#右声道控件

        for lbut in self.left_buttons:#遍历左声道控件
            lbut.clicked.connect(self.on_left_button_clicked)#添加左击事件
            lbut.setEnabled(False)

        for rbut in self.right_buttons:#遍历右声道控件
            rbut.clicked.connect(self.on_right_button_clicked)#添加右击事件
            rbut.setEnabled(False)

        if self.ReadJsonTestArgs(self.itemName) == True:  # 讀取標準參數
            test=[]#测试参数
            testArgs=self.testStandardArgs.split('|')
            #print(self.testStandardArgs)
            if testArgs[0][testArgs[0].find('=')+1:]=='True':
                self.lbl_LeftChannel_2.setText('True')
                self.lbl_LeftChannel_2.setStyleSheet('background-color: rgb(85, 255, 127);')
                self.label_8.setStyleSheet('background-color: rgb(85, 255, 127);')
            if testArgs[1][testArgs[1].find('=')+1:]=='True':
                self.lbl_RightChannel.setText('True')
                self.lbl_RightChannel.setStyleSheet('background-color: rgb(85, 255, 127);')
                self.label_8.setStyleSheet('background-color: rgb(85, 255, 127);')

            #创建一个定时器来检查左右声道音频诊断测试
            self.timer = QTimer(self)
            self.timer.setInterval(1000)  # 每秒检查一次
            self.timer.timeout.connect(self.check_Test)
            self.timer.start()

            # 连接信号到槽
            self.updateTimer.connect(self.handleTimer)

    #左键单击事件
    def on_left_button_clicked(self):
        button = self.sender()
        button.setStyleSheet('background-color: rgb(85, 255, 127);')
        # 假设我们根据按钮的编号来改变颜色
        button_number = self.left_buttons.index(button) + 1
        print(self.randNum,button_number)
        if self.randNum==button_number:
            self.leftChannel_TestPass=True
            self.nowTest='rigthChannel'
            for lbt in self.left_buttons:
                lbt.setEnabled(False)
        self.handleTimer(True);  # 启动线程

    #右键单击事件
    def on_right_button_clicked(self):
        button=self.sender()
        button.setStyleSheet('background-color: rgb(85, 255, 127);')
        # 假设我们根据按钮的编号来改变颜色
        button_number = self.right_buttons.index(button) + 1
        if self.randNum==button_number:
            self.rigthChannel_TestPass=True
            for lbt in self.right_buttons:
                lbt.setEnabled(False)
        self.handleTimer(True);  # 启动线程

    #启动多线程
    def start_analysis_threads(self):
        # 创建多个线程
        self.handleTimer(False)  # 停止进程
        self.finished_threads = 0  # 重置计数器
        thread=Mic_ChannelTest(self)
        thread.start()#执行跑线程

    #判断启动随机播放音频
    def test_AudioChannel(self):
        self.randNum = random.randint(1, 8)  # 生成1到10之间的随机整数
        if self.leftChannel_TestPass == True:  # 左声道测试PASS
            self.label_2.setText('右声道:人机交互测试,点击左边听到的对应序号按钮..')
            self.lbl_CurrentSwTest.setText('音频右声道测试..')
            for rbut in self.right_buttons:  # 遍历右声道控件
                rbut.setStyleSheet('')
                rbut.setEnabled(True)
                # rbut.setStyleSheet('background-color: rgb(85, 255, 127);')
            self.nowTest = 'leftChannel'  # 当前左声道测试
            self.play_mp3(f'{self.rightChannelSoundFile}')  # 左声道播放
            self.play_mp3(f'Microphone/R{str(self.randNum)}.mp3')  # 左声道随机数播放
        else:
            self.label_2.setText('左声道:人机交互测试,点击右边听到的对应序号按钮..')
            self.lbl_CurrentSwTest.setText('音频左声道测试..')
            for lbut in self.left_buttons:  # 遍历左声道控件
                lbut.setEnabled(True)
                lbut.setStyleSheet('')
                # lbut.setStyleSheet('background-color: rgb(85, 255, 127);')
            self.nowTest = 'rightChannel'  # 当前右声道测试
            self.play_mp3(f'{self.leftChannelSoundFile}')  # 右声道播放
            self.play_mp3(f'Microphone/L{str(self.randNum)}.mp3')  # 右声道随机数播放
        #if self.lbl_LeftChannel_2.text()=='True' and self.lbl_RightChannel.text()=='True':

    #播放MP3
    def play_mp3(self,file_path):
        try:
            print('file_path',file_path)
            pygame.mixer.init()
            pygame.mixer.music.load(file_path)
            pygame.mixer.music.play()

            # 等待音乐播放完成
            while pygame.mixer.music.get_busy():
                pygame.time.Clock().tick(10)
        except Exception as e:
            print(f'play mp3 Err:{e}')
            sys.exit(1)


    # 校验是否完成测试
    def check_Test(self):
        if self.lbl_LeftChannel_2.text()=='True' and self.lbl_RightChannel.text()=='True':
            if self.leftChannel_TestPass==True and self.rigthChannel_TestPass==True:
                self.UpdateJsonTestArgs(self.itemName,'LeftChannel=True|RightChannel=True','PASS')#更新测试信息
                self.ShowLog('测试PASS', True)
                sys.exit(0)
        elif self.lbl_LeftChannel_2.text()=='True':
            if self.leftChannel_TestPass==True:
                self.UpdateJsonTestArgs(self.itemName, 'LeftChannel=True', 'PASS')  # 更新测试信息
                self.ShowLog('测试PASS', True)
                sys.exit(0)
        elif self.lbl_RightChannel.text()=='True':
            if self.rigthChannel_TestPass==True:
                self.UpdateJsonTestArgs(self.itemName, 'RightChannel=True', 'PASS')  # 更新测试信息
                self.ShowLog('测试PASS', True)
                sys.exit(0)
        #self.updateTimer.emit(False)  # 重新启动定时器
        self.lbl_CurrentSwTest.setText('音频测试中..')
        self.start_analysis_threads()

    # 定义触发器
    def handleTimer(self, start):
        if start:
            self.timer.start()
        else:
            self.timer.stop()

    def setupUi(self):
        self.setObjectName("Form")
        self.resize(678, 737)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("IMAGE/Mic.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.setWindowIcon(icon)
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.lbl_Logo = QtWidgets.QLabel(self)
        self.lbl_Logo.setText("")
        self.lbl_Logo.setPixmap(QtGui.QPixmap("IMAGE/logo.jpg"))
        self.lbl_Logo.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_Logo.setObjectName("lbl_Logo")
        self.horizontalLayout_4.addWidget(self.lbl_Logo)
        self.label = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label.setFont(font)
        self.label.setStyleSheet("background-color: rgb(170, 170, 127);")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.horizontalLayout_4.addWidget(self.label)
        self.verticalLayout_2.addLayout(self.horizontalLayout_4)
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.lbl_CurrentSwTest = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.lbl_CurrentSwTest.setFont(font)
        self.lbl_CurrentSwTest.setStyleSheet("background-color: rgb(85, 255, 127);")
        self.lbl_CurrentSwTest.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_CurrentSwTest.setObjectName("lbl_CurrentSwTest")
        self.horizontalLayout_5.addWidget(self.lbl_CurrentSwTest)
        self.verticalLayout_2.addLayout(self.horizontalLayout_5)
        self.horizontalLayout.addLayout(self.verticalLayout_2)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.label_5 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_5.setFont(font)
        self.label_5.setStyleSheet("background-color: rgb(255, 170, 127);")
        self.label_5.setAlignment(QtCore.Qt.AlignCenter)
        self.label_5.setObjectName("label_5")
        self.horizontalLayout_6.addWidget(self.label_5)
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.label_4 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_4.setFont(font)
        self.label_4.setStyleSheet("background-color: rgb(255, 170, 127);")
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName("label_4")
        self.verticalLayout_4.addWidget(self.label_4)
        self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
        self.label_7 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_7.setFont(font)
        self.label_7.setStyleSheet("background-color: rgb(255, 170, 127);")
        self.label_7.setAlignment(QtCore.Qt.AlignCenter)
        self.label_7.setObjectName("label_7")
        self.horizontalLayout_8.addWidget(self.label_7)
        self.label_6 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_6.setFont(font)
        self.label_6.setStyleSheet("background-color: rgb(255, 170, 127);")
        self.label_6.setAlignment(QtCore.Qt.AlignCenter)
        self.label_6.setObjectName("label_6")
        self.horizontalLayout_8.addWidget(self.label_6)
        self.verticalLayout_4.addLayout(self.horizontalLayout_8)
        self.horizontalLayout_6.addLayout(self.verticalLayout_4)
        self.verticalLayout_3.addLayout(self.horizontalLayout_6)
        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
        self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
        self.label_8 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label_8.setFont(font)
        self.label_8.setAlignment(QtCore.Qt.AlignCenter)
        self.label_8.setObjectName("label_8")
        self.horizontalLayout_9.addWidget(self.label_8)
        self.horizontalLayout_7.addLayout(self.horizontalLayout_9)
        self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_10.setObjectName("horizontalLayout_10")
        self.lbl_LeftChannel_2 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.lbl_LeftChannel_2.setFont(font)
        self.lbl_LeftChannel_2.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_LeftChannel_2.setObjectName("lbl_LeftChannel_2")
        self.horizontalLayout_10.addWidget(self.lbl_LeftChannel_2)
        self.lbl_RightChannel = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.lbl_RightChannel.setFont(font)
        self.lbl_RightChannel.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_RightChannel.setObjectName("lbl_RightChannel")
        self.horizontalLayout_10.addWidget(self.lbl_RightChannel)
        self.horizontalLayout_7.addLayout(self.horizontalLayout_10)
        self.verticalLayout_3.addLayout(self.horizontalLayout_7)
        self.horizontalLayout.addLayout(self.verticalLayout_3)
        self.verticalLayout.addLayout(self.horizontalLayout,1)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.groupBox = QtWidgets.QGroupBox(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.groupBox.setFont(font)
        self.groupBox.setAlignment(QtCore.Qt.AlignCenter)
        self.groupBox.setObjectName("groupBox")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_11.setObjectName("horizontalLayout_11")
        self.label_13 = QtWidgets.QLabel(self.groupBox)
        self.label_13.setText("")
        self.label_13.setObjectName("label_13")
        self.horizontalLayout_11.addWidget(self.label_13)
        font = QtGui.QFont()
        font.setPointSize(18)
        self.bp_Left_1 = QtWidgets.QPushButton(self.groupBox)
        self.bp_Left_1.setObjectName("bp_Left_1")
        self.bp_Left_1.setFont(font)
        self.horizontalLayout_11.addWidget(self.bp_Left_1)
        self.label_12 = QtWidgets.QLabel(self.groupBox)
        self.label_12.setText("")
        self.label_12.setObjectName("label_12")
        self.horizontalLayout_11.addWidget(self.label_12)
        self.verticalLayout_5.addLayout(self.horizontalLayout_11)
        self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_12.setObjectName("horizontalLayout_12")
        self.label_14 = QtWidgets.QLabel(self.groupBox)
        self.label_14.setText("")
        self.label_14.setObjectName("label_14")
        self.horizontalLayout_12.addWidget(self.label_14)
        self.bp_Left_2 = QtWidgets.QPushButton(self.groupBox)
        self.bp_Left_2.setObjectName("bp_Left_2")
        self.bp_Left_2.setFont(font)
        self.horizontalLayout_12.addWidget(self.bp_Left_2)
        self.label_21 = QtWidgets.QLabel(self.groupBox)
        self.label_21.setText("")
        self.label_21.setObjectName("label_21")
        self.horizontalLayout_12.addWidget(self.label_21)
        self.verticalLayout_5.addLayout(self.horizontalLayout_12)
        self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_13.setObjectName("horizontalLayout_13")
        self.label_15 = QtWidgets.QLabel(self.groupBox)
        self.label_15.setText("")
        self.label_15.setObjectName("label_15")
        self.horizontalLayout_13.addWidget(self.label_15)
        self.bp_Left_3 = QtWidgets.QPushButton(self.groupBox)
        self.bp_Left_3.setObjectName("bp_Left_3")
        self.bp_Left_3.setFont(font)
        self.horizontalLayout_13.addWidget(self.bp_Left_3)
        self.label_22 = QtWidgets.QLabel(self.groupBox)
        self.label_22.setText("")
        self.label_22.setObjectName("label_22")
        self.horizontalLayout_13.addWidget(self.label_22)
        self.verticalLayout_5.addLayout(self.horizontalLayout_13)
        self.horizontalLayout_24 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_24.setObjectName("horizontalLayout_24")
        self.label_30 = QtWidgets.QLabel(self.groupBox)
        self.label_30.setText("")
        self.label_30.setObjectName("label_30")
        self.horizontalLayout_24.addWidget(self.label_30)
        self.bp_Left_4 = QtWidgets.QPushButton(self.groupBox)
        self.bp_Left_4.setObjectName("bp_Left_4")
        self.bp_Left_4.setFont(font)
        self.horizontalLayout_24.addWidget(self.bp_Left_4)
        self.label_3 = QtWidgets.QLabel(self.groupBox)
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_24.addWidget(self.label_3)
        self.verticalLayout_5.addLayout(self.horizontalLayout_24)
        self.horizontalLayout_23 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_23.setObjectName("horizontalLayout_23")
        self.label_31 = QtWidgets.QLabel(self.groupBox)
        self.label_31.setText("")
        self.label_31.setObjectName("label_31")
        self.horizontalLayout_23.addWidget(self.label_31)
        self.bp_Left_5 = QtWidgets.QPushButton(self.groupBox)
        self.bp_Left_5.setObjectName("bp_Left_5")
        self.bp_Left_5.setFont(font)
        self.horizontalLayout_23.addWidget(self.bp_Left_5)
        self.label_11 = QtWidgets.QLabel(self.groupBox)
        self.label_11.setText("")
        self.label_11.setObjectName("label_11")
        self.horizontalLayout_23.addWidget(self.label_11)
        self.verticalLayout_5.addLayout(self.horizontalLayout_23)
        self.horizontalLayout_22 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_22.setObjectName("horizontalLayout_22")
        self.label_32 = QtWidgets.QLabel(self.groupBox)
        self.label_32.setText("")
        self.label_32.setObjectName("label_32")
        self.horizontalLayout_22.addWidget(self.label_32)
        self.bp_Left_6 = QtWidgets.QPushButton(self.groupBox)
        self.bp_Left_6.setObjectName("bp_Left_6")
        self.bp_Left_6.setFont(font)
        self.horizontalLayout_22.addWidget(self.bp_Left_6)
        self.label_28 = QtWidgets.QLabel(self.groupBox)
        self.label_28.setText("")
        self.label_28.setObjectName("label_28")
        self.horizontalLayout_22.addWidget(self.label_28)
        self.verticalLayout_5.addLayout(self.horizontalLayout_22)
        self.horizontalLayout_21 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_21.setObjectName("horizontalLayout_21")
        self.label_33 = QtWidgets.QLabel(self.groupBox)
        self.label_33.setText("")
        self.label_33.setObjectName("label_33")
        self.horizontalLayout_21.addWidget(self.label_33)
        self.bp_Left_7 = QtWidgets.QPushButton(self.groupBox)
        self.bp_Left_7.setObjectName("bp_Left_7")
        self.bp_Left_7.setFont(font)
        self.horizontalLayout_21.addWidget(self.bp_Left_7)
        self.label_29 = QtWidgets.QLabel(self.groupBox)
        self.label_29.setText("")
        self.label_29.setObjectName("label_29")
        self.horizontalLayout_21.addWidget(self.label_29)
        self.verticalLayout_5.addLayout(self.horizontalLayout_21)
        self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_14.setObjectName("horizontalLayout_14")
        self.label_16 = QtWidgets.QLabel(self.groupBox)
        self.label_16.setText("")
        self.label_16.setObjectName("label_16")
        self.horizontalLayout_14.addWidget(self.label_16)
        self.bp_Left_8 = QtWidgets.QPushButton(self.groupBox)
        self.bp_Left_8.setObjectName("bp_Left_8")
        self.bp_Left_8.setFont(font)
        self.horizontalLayout_14.addWidget(self.bp_Left_8)
        self.label_23 = QtWidgets.QLabel(self.groupBox)
        self.label_23.setText("")
        self.label_23.setObjectName("label_23")
        self.horizontalLayout_14.addWidget(self.label_23)
        self.verticalLayout_5.addLayout(self.horizontalLayout_14)
        self.gridLayout_3.addLayout(self.verticalLayout_5, 0, 0, 1, 1)
        self.horizontalLayout_2.addWidget(self.groupBox)
        self.groupBox_2 = QtWidgets.QGroupBox(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.groupBox_2.setFont(font)
        self.groupBox_2.setAlignment(QtCore.Qt.AlignCenter)
        self.groupBox_2.setObjectName("groupBox_2")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_2)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.verticalLayout_6 = QtWidgets.QVBoxLayout()
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_15.setObjectName("horizontalLayout_15")
        self.label_24 = QtWidgets.QLabel(self.groupBox_2)
        self.label_24.setText("")
        self.label_24.setObjectName("label_24")
        font = QtGui.QFont()
        font.setPointSize(18)
        self.horizontalLayout_15.addWidget(self.label_24)
        self.bp_Rigth_1 = QtWidgets.QPushButton(self.groupBox_2)
        self.bp_Rigth_1.setObjectName("bp_Rigth_1")
        self.bp_Rigth_1.setFont(font)
        self.horizontalLayout_15.addWidget(self.bp_Rigth_1)
        self.label_17 = QtWidgets.QLabel(self.groupBox_2)
        self.label_17.setText("")
        self.label_17.setObjectName("label_17")
        self.horizontalLayout_15.addWidget(self.label_17)
        self.verticalLayout_6.addLayout(self.horizontalLayout_15)
        self.horizontalLayout_27 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_27.setObjectName("horizontalLayout_27")
        self.label_38 = QtWidgets.QLabel(self.groupBox_2)
        self.label_38.setText("")
        self.label_38.setObjectName("label_38")
        self.horizontalLayout_27.addWidget(self.label_38)
        self.bp_Rigth_2 = QtWidgets.QPushButton(self.groupBox_2)
        self.bp_Rigth_2.setObjectName("bp_Rigth_2")
        self.bp_Rigth_2.setFont(font)
        self.horizontalLayout_27.addWidget(self.bp_Rigth_2)
        self.label_34 = QtWidgets.QLabel(self.groupBox_2)
        self.label_34.setText("")
        self.label_34.setObjectName("label_34")
        self.horizontalLayout_27.addWidget(self.label_34)
        self.verticalLayout_6.addLayout(self.horizontalLayout_27)
        self.horizontalLayout_28 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_28.setObjectName("horizontalLayout_28")
        self.label_39 = QtWidgets.QLabel(self.groupBox_2)
        self.label_39.setText("")
        self.label_39.setObjectName("label_39")
        self.horizontalLayout_28.addWidget(self.label_39)
        self.bp_Rigth_3 = QtWidgets.QPushButton(self.groupBox_2)
        self.bp_Rigth_3.setObjectName("bp_Rigth_3")
        self.bp_Rigth_3.setFont(font)
        self.horizontalLayout_28.addWidget(self.bp_Rigth_3)
        self.label_35 = QtWidgets.QLabel(self.groupBox_2)
        self.label_35.setText("")
        self.label_35.setObjectName("label_35")
        self.horizontalLayout_28.addWidget(self.label_35)
        self.verticalLayout_6.addLayout(self.horizontalLayout_28)
        self.horizontalLayout_26 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_26.setObjectName("horizontalLayout_26")
        self.label_40 = QtWidgets.QLabel(self.groupBox_2)
        self.label_40.setText("")
        self.label_40.setObjectName("label_40")
        self.horizontalLayout_26.addWidget(self.label_40)
        self.bp_Rigth_4 = QtWidgets.QPushButton(self.groupBox_2)
        self.bp_Rigth_4.setObjectName("bp_Rigth_4")
        self.bp_Rigth_4.setFont(font)
        self.horizontalLayout_26.addWidget(self.bp_Rigth_4)
        self.label_36 = QtWidgets.QLabel(self.groupBox_2)
        self.label_36.setText("")
        self.label_36.setObjectName("label_36")
        self.horizontalLayout_26.addWidget(self.label_36)
        self.verticalLayout_6.addLayout(self.horizontalLayout_26)
        self.horizontalLayout_25 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_25.setObjectName("horizontalLayout_25")
        self.label_41 = QtWidgets.QLabel(self.groupBox_2)
        self.label_41.setText("")
        self.label_41.setObjectName("label_41")
        self.horizontalLayout_25.addWidget(self.label_41)
        self.bp_Rigth_5 = QtWidgets.QPushButton(self.groupBox_2)
        self.bp_Rigth_5.setObjectName("bp_Rigth_5")
        self.bp_Rigth_5.setFont(font)
        self.horizontalLayout_25.addWidget(self.bp_Rigth_5)
        self.label_37 = QtWidgets.QLabel(self.groupBox_2)
        self.label_37.setText("")
        self.label_37.setObjectName("label_37")
        self.horizontalLayout_25.addWidget(self.label_37)
        self.verticalLayout_6.addLayout(self.horizontalLayout_25)
        self.horizontalLayout_17 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_17.setObjectName("horizontalLayout_17")
        self.label_25 = QtWidgets.QLabel(self.groupBox_2)
        self.label_25.setText("")
        self.label_25.setObjectName("label_25")
        self.horizontalLayout_17.addWidget(self.label_25)
        self.bp_Rigth_6 = QtWidgets.QPushButton(self.groupBox_2)
        self.bp_Rigth_6.setObjectName("bp_Rigth_6")
        self.bp_Rigth_6.setFont(font)
        self.horizontalLayout_17.addWidget(self.bp_Rigth_6)
        self.label_18 = QtWidgets.QLabel(self.groupBox_2)
        self.label_18.setText("")
        self.label_18.setObjectName("label_18")
        self.horizontalLayout_17.addWidget(self.label_18)
        self.verticalLayout_6.addLayout(self.horizontalLayout_17)
        self.horizontalLayout_18 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_18.setObjectName("horizontalLayout_18")
        self.label_26 = QtWidgets.QLabel(self.groupBox_2)
        self.label_26.setText("")
        self.label_26.setObjectName("label_26")
        self.horizontalLayout_18.addWidget(self.label_26)
        self.bp_Rigth_7 = QtWidgets.QPushButton(self.groupBox_2)
        self.bp_Rigth_7.setObjectName("bp_Rigth_7")
        self.bp_Rigth_7.setFont(font)
        self.horizontalLayout_18.addWidget(self.bp_Rigth_7)
        self.label_19 = QtWidgets.QLabel(self.groupBox_2)
        self.label_19.setText("")
        self.label_19.setObjectName("label_19")
        self.horizontalLayout_18.addWidget(self.label_19)
        self.verticalLayout_6.addLayout(self.horizontalLayout_18)
        self.horizontalLayout_19 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_19.setObjectName("horizontalLayout_19")
        self.label_27 = QtWidgets.QLabel(self.groupBox_2)
        self.label_27.setText("")
        self.label_27.setObjectName("label_27")
        self.horizontalLayout_19.addWidget(self.label_27)
        self.bp_Rigth_8 = QtWidgets.QPushButton(self.groupBox_2)
        self.bp_Rigth_8.setObjectName("bp_Rigth_8")
        self.bp_Rigth_8.setFont(font)
        self.horizontalLayout_19.addWidget(self.bp_Rigth_8)
        self.label_20 = QtWidgets.QLabel(self.groupBox_2)
        self.label_20.setText("")
        self.label_20.setObjectName("label_20")
        self.horizontalLayout_19.addWidget(self.label_20)
        self.verticalLayout_6.addLayout(self.horizontalLayout_19)
        self.gridLayout_4.addLayout(self.verticalLayout_6, 0, 0, 1, 1)
        self.horizontalLayout_2.addWidget(self.groupBox_2)
        self.verticalLayout.addLayout(self.horizontalLayout_2,7)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.groupBox_3 = QtWidgets.QGroupBox(self)
        font = QtGui.QFont()
        font.setPointSize(12)
        self.groupBox_3.setFont(font)
        self.groupBox_3.setObjectName("groupBox_3")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_3)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label_2 = QtWidgets.QLabel(self.groupBox_3)
        self.label_2.setStyleSheet("background-color: rgb(0, 0, 0);\n"
"color: rgb(255, 255, 127);")
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.gridLayout_2.addWidget(self.label_2, 0, 0, 1, 1)
        self.horizontalLayout_3.addWidget(self.groupBox_3)
        self.verticalLayout.addLayout(self.horizontalLayout_3,2)
        self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)

        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
        self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint | QtCore.Qt.WindowCloseButtonHint)  # 只显示最小化按钮和关闭按钮

    # 更新测试参数json,itemName:项目名称,readValue:读取值,testResult:测试结果
    def UpdateJsonTestArgs(self, itemName, readValue, testResult):
        try:
            updateTestArgs = []  # 更新的测试参数
            self.testArgs = self.ReadJsonInfo('./Conf/TestArgs.json')
            for js in self.testArgs:
                if itemName in js['ItemName']:
                    js['Read'] = readValue  # 读取的值
                    js['TestResult'] = testResult  # 测试结果
                    updateTestArgs.append(js)
                else:
                    updateTestArgs.append(js)
            with open("./Conf/TestArgs.json", "w") as write_file:
                json.dump(updateTestArgs, write_file)
            return True
        except Exception as e:
            self.ShowLog("Read TestArgs.json ItemName:" + itemName + " Info Err:" + str(e), False)
            sys.exit(1)

    # 启动线重脚本
    def TestThread(self):
        pass
        # self.t_autoplay=Thread(target=self.Test)
        # self.t_autoplay.start()

    # 读取项目参数信息,itemName:项目名称
    def ReadJsonTestArgs(self, itemName):
        try:
            #print('self.testArgs:', self.testArgs)
            self.testArgs = self.ReadJsonInfo('./Conf/TestArgs.json')

            for js in self.testArgs:
                if itemName in js['ItemName']:
                    self.testStandardArgs = js['Standard']
                    return True
            self.ShowLog('Read TestArgs.json ItemName:' + itemName + ' Info Is Empty!!', False)
            sys.exit(1)
        except Exception as e:
            self.ShowLog("Read TestArgs.json ItemName:" + itemName + " Info Err:" + str(e), False)
            sys.exit(1)

    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("Form", "Mic-【测试】"))
        self.label.setText(_translate("Form", "控制过程"))
        self.lbl_CurrentSwTest.setText(_translate("Form", "Wait..."))
        self.label_5.setText(_translate("Form", "测试项目"))
        self.label_4.setText(_translate("Form", "音频声道"))
        self.label_7.setText(_translate("Form", "左声道"))
        self.label_6.setText(_translate("Form", "右声道"))
        self.label_8.setText(_translate("Form", "喇叭测试"))
        self.lbl_LeftChannel_2.setText(_translate("Form", "N/A"))
        self.lbl_RightChannel.setText(_translate("Form", "N/A"))
        self.groupBox.setTitle(_translate("Form", "【左声道】"))
        self.bp_Left_1.setText(_translate("Form", "1"))
        self.bp_Left_2.setText(_translate("Form", "2"))
        self.bp_Left_3.setText(_translate("Form", "3"))
        self.bp_Left_4.setText(_translate("Form", "4"))
        self.bp_Left_5.setText(_translate("Form", "5"))
        self.bp_Left_6.setText(_translate("Form", "6"))
        self.bp_Left_7.setText(_translate("Form", "7"))
        self.bp_Left_8.setText(_translate("Form", "8"))
        self.groupBox_2.setTitle(_translate("Form", "【右声道】"))
        self.bp_Rigth_1.setText(_translate("Form", "1"))
        self.bp_Rigth_2.setText(_translate("Form", "2"))
        self.bp_Rigth_3.setText(_translate("Form", "3"))
        self.bp_Rigth_4.setText(_translate("Form", "4"))
        self.bp_Rigth_5.setText(_translate("Form", "5"))
        self.bp_Rigth_6.setText(_translate("Form", "6"))
        self.bp_Rigth_7.setText(_translate("Form", "7"))
        self.bp_Rigth_8.setText(_translate("Form", "8"))
        self.groupBox_3.setTitle(_translate("Form", "【日志】"))
        self.label_2.setText(_translate("Form", "待测试.."))

    # 读取json信息
    def ReadJsonInfo(self, fileName):
        try:
            if os.path.exists(fileName):
                f = open(fileName, 'r', encoding='utf-8')
            return json.loads(f.read())
        except Exception as e:
            self.ShowLog("Read " + fileName + " Err:" + str(e), False)
            #sys.exit(1)

    # 手动关闭窗口
    def closeEvent(self, event):
        # 告知线程停止运行
        sys.exit(1)

    # 定义一个函数使得函数窗口居中显示
    def Center(self):
        # 获取屏幕尺寸
        screen_geometry = app.desktop().availableGeometry()
        # 计算窗口居中位置
        x = (screen_geometry.width() - self.width()) // 2
        y = (screen_geometry.height() - self.height()) // 2
        # 设置窗口位置
        self.move(x, y)

    # 打印的信息
    def ShowLog(self, log, isPass):
        try:
            if isPass == True:
                self.label_2.setStyleSheet("background-color: rgb(85, 255, 127);color:green;")
                self.logger.info(str(log))
                self.label_2.setText("TEST PASS")
            else:
                self.label_2.setStyleSheet("background-color: rgb(85, 255, 127);color: red;")
                self.logger.error(str(log))
                self.label_2.setText(log)
        except Exception as e:
            print("\033[1;31m" + str(e) + " \033[0m")
            #sys.exit(1)

if __name__=='__main__':
    app=QApplication(sys.argv)
    win=Ui_Form()
    win.Center()  # 居中
    win.show()
    #win.start_realtime_audio_processing()  # 启动实时音频处理
    sys.exit(app.exec_())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1429230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java正则表达式之Pattern和Matcher

目录 前言一、Pattern和Matcher的简单使用二、Pattern详解2.1 Pattern 常用方法2.1.1 compile(String regex)2.1.2 matches(String regex, CharSequence input)2.1.3 split(CharSequence input)2.1.4 pattern()2.1.5 matcher(CharSequence input) 三、Matcher详解3.1 Matcher 常…

​(三)hadoop之hive的搭建1

下载 访问官方网站https://hive.apache.org/ 点击downloads 点击Download a release now! 点击https://dlcdn.apache.org/hive/ 选择最新的稳定版 复制最新的url 在linux执行下载命令 wget https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 2.解压…

账簿和明细账

目录 一. 账簿的意义和种类二. 明细账 \quad 一. 账簿的意义和种类 \quad 账簿是由一定格式、互有联系的账页组成,以审核无误的会计凭证为依据,用来序时地、分类地记录和反映各项经济业务的会计簿籍(或称账本)。设置和登记账簿是会计工作的重…

10个常考的前端手写题,你全都会吗?(上)

前言 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步! 🍅 个人主页:南木元元 今天来分享一下10个常见的JavaScript手写功能。 目录 1.实现new 2.call、apply、…

C++:输入流/输出流

C流类库简介 C为了克服C语言中的scanf和printf存在的缺点。,使用cin/cout控制输入/输出。 cin:表示标准输入的istream类对象,cin从终端读入数据。cout:表示标准输出的ostream类对象,cout向终端写数据。cerr&#xff…

刘知远团队大模型技术与交叉应用L6-基于大模型文本理解和生成介绍

介绍 NLP的下游运用可以分为:NLU(理解)和NLG(生成) 信息检索:NLU 文本生成:NLG 机器问答:NLUNLG 大模型在信息检索 大模型在机器问答 大模型在文本生成 信息检索-Information Retrieval (IR) 背景 谷歌搜索引擎目前同时集成了…

水表表盘读数识别新体验,带你进入华为云ModelArts算法套件的世界

前言 数字时代,数字化服务已经发展到各行各业,我们的生活中也随处可见。 数字化服务的便捷了我们的衣食住行的方方面面,除了我们日常化的出行、饮食、购物,其实住方面也已有了很深的发展。 水电燃气这三项和我们生活息息相关的…

YOLO-World: Real-Time Open-Vocabulary Object Detection

文章目录 1. Introduction2. Experiments2.1 Implementation Details2.2 Pre-training2.3 Ablation Experiments2.3.1 预训练数据2.3.2 对RepVL-PAN的消融研究2.3.3 文本编码器 2.4 Fine-tuning YOLO-World2.5 Open-Vocabulary Instance Segmentation2.6 Visualizations Refere…

R语言分析任务:

有需要实验报告的可CSDN 主页个人私信 《大数据统计分析软件(R语言)》 实 验 报 告 指导教师: 专 业: 班 级: 姓 名: 学 …

Multisim14.0仿真(四十三)LM311应用

一、LM311简介: lm311是一款高灵活性的电压比较器,能工作于5V-30V单个电源或正负15V分离电源。 二、LM311主要特性: ★ 快速响应时间:165 ns。 ★ 选通能力。 ★ 最大输入偏置电流:300nA。 ★ 最大输入偏置电流&#…

8868体育助力意甲尤文图斯俱乐部 帮助球队签订新合同

意甲的尤文图斯俱乐部是8868合作体育球队之一,根据意大利媒体的消息,尤文图斯已经决定和费德里科-基耶萨续约,这名球员已经开始思考他的将来了。 费德里科-基耶萨今年26岁,他和尤文图斯的合约到2025年6月30号就结束了。他知道很多…

大数据分析|设计大数据分析的三个阶段

文献来源:Saggi M K, Jain S. A survey towards an integration of big data analytics to big insights for value-creation[J]. Information Processing & Management, 2018, 54(5): 758-790. 下载链接:链接:https://pan.baidu.com/s/1…

flask基于django大数据的证券股票分析系统python可视化大屏

证券分析系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的Python进行编写,使用了Django框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能包括:个人信息修改,对股票信息、股票买入、…

[Linux 进程(六)] 写时拷贝 - 进程终止

文章目录 1、写时拷贝2、进程终止2.1 进程退出场景2.1.1 退出码2.1.2 错误码错误码 vs 退出码2.1.3 代码异常终止引入 2.2 进程常见退出方法2.2.1 exit函数2.2.2 _exit函数 本片我们主要来讲进程控制,讲之前我们先把写时拷贝理清,然后再开始讲进程控制。…

从源代码看Chrome 版本号

一直以来都是用Chrome 浏览器,但是看到Chrome 点分4 组数据的表达方式,总是感觉怪怪的,遂深入源代码了解她的版本号具体表示的内容 chrome 浏览器中显示的版本号 源代码中的版本号标识 版本号文件位于 chrome/VERSION , 看到源代…

Docker上安装配置tomcat

目录 1. 拉取镜像 2. 创建运行镜像 3. 查看是否创建成功 ps:如果出现404错误 tomcat目录结构 1. 拉取镜像 这里使用 tomcat:8.5.40 版本作为安装 docker pull tomcat:8.5.40 2. 创建运行镜像 docker run -d --name tomcat -p 8080:8080 \--privilegedtrue …

2024最新版Sublime Text 4安装使用指南

2024最新版Sublime Text 4安装使用指南 Installation and Usage Guide to the Latest Sublime Text 4 in 2024 By JacksonML 0. Sublime Text是什么? Sublime Text 由自定义组件构建,支持Python, Java, C/C等多种编程语言,并为用户提供无与…

记一次 Android CPU高使用率排查

文章目录 背景排查高占用的进程adb shelltoptop -b -H -n 1 | grep 29337 (打印各线程 cpu使用详情)kill -3 29337 (生成trace文件)adb pull /data/anr /Users/gerry.liang/Desktop定位问题 补充说明: 背景 测试同学反馈我们的App CPU使用率 90% 居高不下,经过一番艰难的排查后…

flutter如何实现省市区选择器

前言 当我们需要用户填写地址时,稳妥的做法是让用户通过“滚轮”来滑动选择省份,市,区,此文采用flutter的第三方库来实现这一功能,比调用高德地图api简单一些。 流程 选择库 这里我选择了一个最近更新且支持中国的…

本体匹配方法概述

目录 前言1 基于术语匹配的方法1.1 字符串匹配1.2 语言方法 2 基于虚拟文档的方法3 基于结构的匹配方法3.1 结构信息利用3.2 Anchor-prompt方法 4 大型本体匹配4.1 本体划分4.2 匹配分块4.3 实体间映射 结语 前言 本文将深入探讨本体匹配的不同方法,从基于术语匹配…