UOS python+pyqt5实现USB测试

复制代码
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'UsbTest.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.


import sys
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout
from PyQt5 import QtWidgets
from PyQt5 import QtGui
from PyQt5 import QtCore
from PyQt5.Qt import QTimer
import logging
import subprocess
from subprocess import Popen
import os
import json
import configparser
#import pyudev #pip install pyudev USB接入后自动触发事件
#import time

class Ui_UsbTestMainFrm(QWidget):
    def __init__(self):
        super().__init__()
        self.config = configparser.ConfigParser()  # 创建对象
        self.Usb_info = []  # Usb信息
        self.StorageName = []  # 所有存储器名称
        self.testArgs = []  # 测试参数信息
        self.testStandardArgs = ''  # 测试标准参数
        self.itemName = ''  # 项目名称
        self.itemFailSleepExit = 0  # 项目Fail延时退出
        self.testUsb2Count=0#测试USB2.0数量
        self.testUsb2Device=[]#usb2.0硬件信息
        self.testUsb3Count=0#测试USB3.0数量
        self.testUsb3Device=[]#usb3.0硬件信息
        self.readUsb2Count=0#读取USB2.0数量
        self.readUsb3Count=0#读取USB3.0数量
        self.PassUsbInfo=[]#测试PASS数据
        #self.readUsb2DeviceId=''#读取的Usb2硬件信息
        #self.readUsb3DeviceId=''#读取的Usb3硬件信息
        self.readUsbDeviceIds=''#读取usb装置集
        self.addUiDeviceIds=''#已添加到Ui的数据
        self.isStartTime=False
        self.index=0
        self.usb_layout= QHBoxLayout()

        # 生成日志信息
        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.itemName=self.config.get('TestItemNameArrays','UsbTestName')#项目测试Fail延时退出
        self.itemFailSleepExit=int(self.config.get('TestItemWinFrmSleepExit','UsbTest'))#项目测试Fail延时退出
        self.testArgs=self.ReadJsonInfo('./Conf/TestArgs.json')#读取测试参数信息

        #读取标准值
        if self.ReadJsonTestArgs(self.itemName)==True:
            testArgs=[]#测试参数
            usb2Args=[]#usb2.0测试参数
            usb3Args=[]#usb3.0测试参数
            testArgs=self.testStandardArgs.split('|')
            usb2Args=testArgs[0]#分割usb2.0测试参数
            usb3Args=testArgs[1]#分割usb3.0测试参数

            #读取USB2.0数量
            self.testUsb2Count =int(usb2Args[usb2Args.find('=') + 1:])
            #读取USB3.0数量
            self.testUsb3Count =int(usb3Args[usb3Args.find('=') + 1:])

            self.setupUi()

            #设置配置数量
            self.lbl_setUsb3Num.setText(str(self.testUsb3Count))#设置USB3.0数量
            self.lbl_setUsb2Num.setText(str(self.testUsb2Count))#设置USB2.0数量

            #程式启动自动测试
            if self.UsbPortTest() == True:
                # 同步当前时间
                # 创建一个定时器,用于更新QLCDNumber的时间
                sys.exit(0)
            self.timer = QTimer()
            self.timer.timeout.connect(self.update_time)
            self.timer.start(1000)  # 每隔1000毫秒(1秒)更新一次时间


            #usb接入触发事件
            #context = pyudev.Context()
            #monitor = pyudev.Monitor.from_netlink(context)
            #monitor.filter_by(subsystem='usb')
            #observer = pyudev.MonitorObserver(monitor, callback=self.usb_event_handler)
            #observer.start()

    #Ui刷新
    #def paintEvent(self, event):
    #    super().paintEvent(event)
    #    if self.index>=5:
     #       self.resize(737, 653)
    #    print("界面已刷新")

    #usb接入触发事件
    #def usb_event_handler(self,device):
    #    print("USB设备已接入:", device)
    #    if self.UsbPortTest() == True:
            # 同步当前时间
            # 创建一个定时器,用于更新QLCDNumber的时间
    #        self.timer = QTimer()
    #        self.timer.timeout.connect(self.update_time)
    #        self.timer.start(1000)  # 每隔1000毫秒(1秒)更新一次时间
    def toggleResize(self):
        self.resize(737, 853)

    #Usb接口测试
    def UsbPortTest(self):
        try:
            #self.Usb_info.clear()#清空Usb装置信息
            if self.GetDirectoryAllFileName('/sys/block'):
                for deviceName in self.StorageName:
                    self.ReadStorageInfo('/dev/' + deviceName)
                readUsbDeviceId=''
                for usbinfo in self.Usb_info:#遍历USB读取
                    isPass=False
                    usbDeviceIds = usbinfo['DeviceId'].split('/')
                    # deviceId:硬件ID,portType:端口类型,读取的硬件地址,rBrand:读取的品牌规格,rSize:容量大小,rType:读取类型
                    if usbDeviceIds[1] not in self.readUsbDeviceIds:
                        self.readUsbDeviceIds+=usbDeviceIds[1]+','
                        if usbinfo['Type']=='usb2' or usbinfo['Type']=='usb1':
                            self.readUsb2Count+=1
                            self.PassUsbInfo.append(usbinfo)
                        elif usbinfo['Type']=='usb3':
                            self.readUsb3Count+=1
                            self.PassUsbInfo.append(usbinfo)
                self.lbl_readUsb3Num.setText(str(self.readUsb3Count))  # 读取3.0数量
                self.lbl_readUsb2Num_2.setText(str(self.readUsb2Count))  # 读取2.0数量

                for psUsbInfo in self.PassUsbInfo:
                    #readUsbDeviceId+=psUsbInfo['DeviceId']+','
                    readDeviceIds =[]
                    readDeviceIds=psUsbInfo['DeviceId'].split('/')
                    if self.index==0 or readDeviceIds[1] not in self.addUiDeviceIds:
                        self.addUiDeviceIds+=readDeviceIds[1]+','
                        # deviceId:硬件ID,portType:端口类型,读取的硬件地址,rBrand:读取的品牌规格,rSize:容量大小,rType:读取类型
                        # def __init__(self, deviceId, portType, rdevicePath, rBrand, rSize, rType):
                        usbTest = Ui_Form(psUsbInfo['DevicePath'], psUsbInfo['Type'] + '.0', psUsbInfo['DevicePath'],psUsbInfo['Brand'], psUsbInfo['Size'], readDeviceIds[1])
                        if (self.index) % 2 == 0:  # 创建新的水平布局
                            self.usb_layout = QHBoxLayout()
                            self.layout_teui.addLayout(self.usb_layout)
                        self.usb_layout.addWidget(usbTest)  # 添加最后一个水平布
                        self.index+=1
                        
                        #usb_layout.addWidget(usbTest)#
                        #self.layout_teui.addLayout(usb_layout)
                readValue='usb2='+str(self.readUsb2Count)+'|'+'usb3='+str(self.readUsb3Count)
                if self.testUsb2Count==self.readUsb2Count and self.testUsb3Count==self.readUsb3Count:
                    self.lbl_log.setStyleSheet("color:green;")
                    self.lbl_log.setText('PASS')
                    self.UpdateJsonTestArgs(self.itemName, readValue, 'PASS')
                    return True
                else:
                    self.lbl_log.setText('测试中...')
                    self.UpdateJsonTestArgs(self.itemName, readValue, 'FAIL')
                    self.isStartTime=True
                    return False
            else:
                self.ShowLog("Get Usb Device Name Is Empty!!", False)
                sys.exit(1)
        except Exception as e:
            self.ShowLog("Usb Port Test Err:" + str(e),False)
            sys.exit(1)

    #获取目录下所有文件名
    def GetDirectoryAllFileName(self,DirectoryName):
        try:
            self.StorageName.clear()#清空存储器信息
            # 获取指定目录下所有文件名
            file_names = os.listdir(DirectoryName)

            # 遍历读取所有文件名称
            for file_name in file_names:
                self.StorageName.append(file_name)

            if len(self.StorageName)>0:
                return True
            else:
                return False
        except Exception as e:
            self.ShowLog("Read "+DirectoryName+" Directory Info Err:" + str(e),False)
            sys.exit(1)

    #同步当前时间
    def update_time(self):
        # 获取当前时间
        #current_time = QTime.currentTime()
        if self.isStartTime==True:
            self.isStartTime=False
            #if self.index>=5:
            #    self.toggleResize()
            if self.UsbPortTest()==True:
                sys.exit(0)


        #current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        # 将当前时间显示在QLCDNumber上

    #读取项目参数信息,itemName:项目名称
    def ReadJsonTestArgs(self,itemName):
        try:
            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)

    #更新测试参数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 ReadStorageInfo(self,devicePath):
        try:
            #devicePath:设备路径名称、Size:存信器大小、Type:储寄器类存、Barand:品牌规格、ID_SERIAL:设备通讯信息、DevLinks:设备连接信息
            tempStorageInfo={'DevicePath':'N/A','Size':'N/A','Type':'N/A','Brand':'N/A','DeviceId':'N/A','reads':'N/A',
            'Serial_Number':'N/A','FW':'N/A','Power_Cycles':'N/A','Power_On_Hours':'N/A','Temperature':'N/A'}#临时的存储器信息
            tempStorageInfo['DevicePath']=devicePath#设备路径名称
            ID_SERIAL=self.RuncmdGetInfo('udevadm info --query=property --name='+devicePath+' | grep "ID_SERIAL="')
            DEVLINKS =self.RuncmdGetInfo('udevadm info --query=property --name=' + devicePath + ' | grep "DEVLINKS="')
            ID_BUS =self.RuncmdGetInfo('udevadm info --query=property --name=' + devicePath + ' | grep "ID_BUS="')
            DEVPATH=self.RuncmdGetInfo('udevadm info --query=property --name=' + devicePath + ' | grep "DEVPATH="')
            DiskSize=self.RuncmdGetInfo("fdisk -l | grep 'Disk '"+devicePath)
            DiskSize=DiskSize[DiskSize.find(':')+2:DiskSize.find(',')]
            ID_PART_TABLE_TYPE = self.RuncmdGetInfo('udevadm info --query=property --name=' + devicePath + ' | grep "ID_PART_TABLE_TYPE="')
            tempStorageInfo['Brand']=ID_SERIAL[ID_SERIAL.find('=')+1:]
            tempStorageInfo['Brand']=tempStorageInfo['Brand'][:tempStorageInfo['Brand'].find('_')]#厂商
            tempStorageInfo['Size']=DiskSize#存储器大小
            #tempStorageInfo['DevLinks']=DEVLINKS[DEVLINKS.find('=')+1:]
            if len(ID_BUS)>0:
                #reads = self.RuncmdGetInfo('hdparm -tT ' + devicePath + ' | grep "Timing buffered disk reads"')
                #reads = reads[reads.find('=') + 2:]
                #tempStorageInfo['reads'] = reads  # 读写的速率
                temp=DEVPATH[DEVPATH.find('/usb')+1:DEVPATH.find('/host')]
                tempStorageInfo['Type']=temp[:temp.find('/')]#设备类型
                tempStorageInfo['DeviceId']=temp[len(tempStorageInfo['Type'])+1:]#硬件ID
                self.Usb_info.append(tempStorageInfo)
                return True
        except Exception as e:
            self.ShowLog("Read "+devicePath+" Device Info Err:" + str(e),False)
            sys.exit(1)

    #读取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 RuncmdGetInfo(self,cmd):
        try:
            readcmdinfo=Popen([cmd],stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
            #获取子进程输出
            stdout,stderr=readcmdinfo.communicate()
            #将输出转换成字符串
            return stdout.decode("utf-8").strip()#返回数据
        except Exception as e:
            self.ShowLog("Run Cmd Get Info Err:" + str(e), False)
            sys.exit(1)

    #窗体绘制
    def setupUi(self):
        self.setObjectName("Ui_UsbTestMainFrm")
        self.resize(737, 453)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("IMAGE/usb.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.setWindowIcon(icon)
        self.verticalLayout_9 = QtWidgets.QVBoxLayout(self)
        self.verticalLayout_9.setObjectName("verticalLayout_9")
        self.verticalLayout_6 = QtWidgets.QVBoxLayout()
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.lbl_Logo = QtWidgets.QLabel(self)
        self.lbl_Logo.setText("")
        self.lbl_Logo.setPixmap(QtGui.QPixmap("IMAGE/logo.jpg"))
        self.lbl_Logo.setObjectName("lbl_Logo")
        self.horizontalLayout_3.addWidget(self.lbl_Logo)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setObjectName("verticalLayout")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_7 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setBold(True)
        font.setWeight(75)
        self.label_7.setFont(font)
        self.label_7.setStyleSheet("background-color: rgb(127, 127, 127);\n"
                                   "color: rgb(255, 255, 255);")
        self.label_7.setAlignment(QtCore.Qt.AlignCenter)
        self.label_7.setObjectName("label_7")
        self.horizontalLayout.addWidget(self.label_7)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.label = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setBold(True)
        font.setWeight(75)
        self.label.setFont(font)
        self.label.setStyleSheet("background-color: rgb(127, 127, 127);\n"
                                 "color: rgb(255, 255, 255);")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.verticalLayout_3.addWidget(self.label)
        self.lbl_setUsb3Num = QtWidgets.QLabel(self)
        self.lbl_setUsb3Num.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_setUsb3Num.setObjectName("lbl_setUsb3Num")
        self.verticalLayout_3.addWidget(self.lbl_setUsb3Num)
        self.horizontalLayout.addLayout(self.verticalLayout_3)
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.label_5 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setBold(True)
        font.setWeight(75)
        self.label_5.setFont(font)
        self.label_5.setStyleSheet("background-color: rgb(127, 127, 127);\n"
                                   "color: rgb(255, 255, 255);")
        self.label_5.setAlignment(QtCore.Qt.AlignCenter)
        self.label_5.setObjectName("label_5")
        self.verticalLayout_4.addWidget(self.label_5)
        self.lbl_setUsb2Num = QtWidgets.QLabel(self)
        self.lbl_setUsb2Num.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_setUsb2Num.setObjectName("lbl_setUsb2Num")
        self.verticalLayout_4.addWidget(self.lbl_setUsb2Num)
        self.horizontalLayout.addLayout(self.verticalLayout_4)
        self.verticalLayout_2.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_8 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setBold(True)
        font.setWeight(75)
        self.label_8.setFont(font)
        self.label_8.setStyleSheet("background-color: rgb(170, 170, 127);\n"
                                   "color: rgb(255, 255, 255);")
        self.label_8.setAlignment(QtCore.Qt.AlignCenter)
        self.label_8.setObjectName("label_8")
        self.horizontalLayout_2.addWidget(self.label_8)
        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.label_3 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setBold(True)
        font.setWeight(75)
        self.label_3.setFont(font)
        self.label_3.setStyleSheet("background-color: rgb(170, 170, 127);\n"
                                   "color: rgb(255, 255, 255);")
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.verticalLayout_5.addWidget(self.label_3)
        self.lbl_readUsb3Num = QtWidgets.QLabel(self)
        self.lbl_readUsb3Num.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_readUsb3Num.setObjectName("lbl_readUsb3Num")
        self.verticalLayout_5.addWidget(self.lbl_readUsb3Num)
        self.horizontalLayout_2.addLayout(self.verticalLayout_5)
        self.verticalLayout_7 = QtWidgets.QVBoxLayout()
        self.verticalLayout_7.setObjectName("verticalLayout_7")
        self.label_9 = QtWidgets.QLabel(self)
        font = QtGui.QFont()
        font.setFamily("微软雅黑")
        font.setBold(True)
        font.setWeight(75)
        self.label_9.setFont(font)
        self.label_9.setStyleSheet("background-color: rgb(170, 170, 127);\n"
                                   "color: rgb(255, 255, 255);")
        self.label_9.setAlignment(QtCore.Qt.AlignCenter)
        self.label_9.setObjectName("label_9")
        self.verticalLayout_7.addWidget(self.label_9)
        self.lbl_readUsb2Num_2 = QtWidgets.QLabel(self)
        self.lbl_readUsb2Num_2.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_readUsb2Num_2.setObjectName("lbl_readUsb2Num_2")
        self.verticalLayout_7.addWidget(self.lbl_readUsb2Num_2)
        self.horizontalLayout_2.addLayout(self.verticalLayout_7)
        self.verticalLayout_2.addLayout(self.horizontalLayout_2)
        self.verticalLayout.addLayout(self.verticalLayout_2)
        self.horizontalLayout_3.addLayout(self.verticalLayout)
        self.verticalLayout_6.addLayout(self.horizontalLayout_3)
        self.layout_teui = QtWidgets.QVBoxLayout()
        self.layout_teui.setObjectName("layout_teui")
        self.verticalLayout_6.addLayout(self.layout_teui)
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.groupBox = QtWidgets.QGroupBox(self)
        font = QtGui.QFont()
        font.setPointSize(13)
        self.groupBox.setFont(font)
        self.groupBox.setObjectName("groupBox")
        self.verticalLayout_10 = QtWidgets.QVBoxLayout(self.groupBox)
        self.verticalLayout_10.setObjectName("verticalLayout_10")
        self.lbl_log = QtWidgets.QLabel(self.groupBox)
        font = QtGui.QFont()
        font.setPointSize(19)
        self.lbl_log.setFont(font)
        self.lbl_log.setStyleSheet("background-color: rgb(0, 0, 0);\n"
                                   "color: rgb(255, 170, 0);")
        self.lbl_log.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_log.setObjectName("lbl_log")
        self.verticalLayout_10.addWidget(self.lbl_log)
        self.horizontalLayout_4.addWidget(self.groupBox)
        self.verticalLayout_6.addLayout(self.horizontalLayout_4)
        self.verticalLayout_9.addLayout(self.verticalLayout_6)

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

    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("HddTestMainFrm", "USBTest"))
        self.label_7.setText(_translate("HddTestMainFrm", "配置接口"))
        self.label.setText(_translate("HddTestMainFrm", "USB3.0测试数"))
        self.lbl_setUsb3Num.setText(_translate("HddTestMainFrm", "N/A"))
        self.label_5.setText(_translate("HddTestMainFrm", "USB2.0测试数"))
        self.lbl_setUsb2Num.setText(_translate("HddTestMainFrm", "N/A"))
        self.label_8.setText(_translate("HddTestMainFrm", "侦测接口"))
        self.label_3.setText(_translate("HddTestMainFrm", "USB3.0测试数"))
        self.lbl_readUsb3Num.setText(_translate("HddTestMainFrm", "N/A"))
        self.label_9.setText(_translate("HddTestMainFrm", "USB2.0测试数"))
        self.lbl_readUsb2Num_2.setText(_translate("HddTestMainFrm", "N/A"))
        self.groupBox.setTitle(_translate("HddTestMainFrm", "【日志】"))
        self.lbl_log.setText(_translate("HddTestMainFrm", "待测试"))

    #禁止设整窗体大小
    #def resizeEvent(self, event):
        # 获取当前窗口的大小
    #    current_size = self.size()

        # 设置窗口的最大大小和最小大小,使其无法通过鼠标调整
    #    self.setMaximumSize(current_size)
    #    self.setMinimumSize(current_size)

        # 调用父类的resizeEvent方法,以便正常调整窗口大小
    #    super().resizeEvent(event)

    # 定义一个函数使得函数窗口居中显示
    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.lbl_log.setStyleSheet("color:green;")
                self.logger.info(str(log))
            else:
                self.lbl_log.setStyleSheet("color:red;")
                self.logger.error(str(log))
            self.lbl_log.setText(str(log))
        except Exception as e:
            print("\033[1;31m" + str(e) + " \033[0m")
            sys.exit(1)

    #点击窗体按钮退出
    def closeEvent(self, event):
        # 创建一个消息框,上面有两个按钮:“是”和“否”
        #reply = QMessageBox.question(self, '退出', "你确定要退出吗?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

        # 如果用户点击了“是”,则执行event.accept()来关闭窗口
        #if reply == QMessageBox.Yes:
        #    event.accept()
        #    sys.exit(1)
        #else:
            # 如果用户点击了“否”,则忽略event,不关闭窗口
        #    event.ignore()
        readValue='usb2='+str(self.readUsb2Count)+'|'+'usb3='+str(self.readUsb3Count)
        self.UpdateJsonTestArgs(self.itemName, readValue, 'FAIL')
        sys.exit(1)

class Ui_Form(QWidget):
    #初始化
    #deviceId:硬件ID,portType:端口类型,读取的硬件地址,rBrand:读取的品牌规格,rSize:容量大小,rType:读取类型
    def __init__(self,deviceId,portType,rdevicePath,rBrand,rSize,rType):
    #def __init__(self):
        super().__init__()
        self.setupUi()

        #设置参数
        self.lbl_DeviceId.setText(deviceId)#设置硬件ID
        self.lbl_PortType.setText(portType)#端口类型/USB2.0或者USB3.0
        self.lbl_rDevicePath.setText(rdevicePath)#读取硬件地址
        self.lbl_rBrand.setText(rBrand)#读取厂商品牌规格
        self.lbl_rSize.setText(rSize)#读取容量大小
        self.lbl_rType.setText(rType)#读取端口类型


    #Ui初始化
    def setupUi(self):
        self.setObjectName("Form")
        self.resize(219, 142)
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.verticalLayout_9 = QtWidgets.QVBoxLayout()
        self.verticalLayout_9.setObjectName("verticalLayout_9")
        self.verticalLayout_10 = QtWidgets.QVBoxLayout()
        self.verticalLayout_10.setObjectName("verticalLayout_10")
        self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_11.setObjectName("horizontalLayout_11")
        self.verticalLayout_12 = QtWidgets.QVBoxLayout()
        self.verticalLayout_12.setObjectName("verticalLayout_12")
        self.lbl_DeviceId = QtWidgets.QLabel(self)
        self.lbl_DeviceId.setStyleSheet("background-color: rgb(170, 170, 127);\n"
                                        "color: rgb(255, 255, 255);")
        self.lbl_DeviceId.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_DeviceId.setObjectName("lbl_DeviceId")
        self.verticalLayout_12.addWidget(self.lbl_DeviceId)
        self.lbl_PortType = QtWidgets.QLabel(self)
        self.lbl_PortType.setStyleSheet("background-color: rgb(170, 170, 127);\n"
                                        "color: rgb(255, 255, 255);")
        self.lbl_PortType.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_PortType.setObjectName("lbl_PortType")
        self.verticalLayout_12.addWidget(self.lbl_PortType)
        self.horizontalLayout_11.addLayout(self.verticalLayout_12)
        self.verticalLayout_10.addLayout(self.horizontalLayout_11)
        self.verticalLayout_9.addLayout(self.verticalLayout_10)
        self.horizontalLayout_3.addLayout(self.verticalLayout_9)
        self.gridLayout_2 = QtWidgets.QGridLayout()
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.groupBox_2 = QtWidgets.QGroupBox(self)
        self.groupBox_2.setObjectName("groupBox_2")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.groupBox_2)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.verticalLayout_6 = QtWidgets.QVBoxLayout()
        self.verticalLayout_6.setObjectName("verticalLayout_6")
        self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
        self.label_3 = QtWidgets.QLabel(self.groupBox_2)
        self.label_3.setStyleSheet("background-color: rgb(255, 170, 0);")
        self.label_3.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_8.addWidget(self.label_3)
        self.lbl_rDevicePath = QtWidgets.QLabel(self.groupBox_2)
        self.lbl_rDevicePath.setObjectName("lbl_rDevicePath")
        self.horizontalLayout_8.addWidget(self.lbl_rDevicePath)
        self.verticalLayout_6.addLayout(self.horizontalLayout_8)
        self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
        self.label_5 = QtWidgets.QLabel(self.groupBox_2)
        self.label_5.setStyleSheet("background-color: rgb(85, 170, 127);")
        self.label_5.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
        self.label_5.setObjectName("label_5")
        self.horizontalLayout_9.addWidget(self.label_5)
        self.lbl_rBrand = QtWidgets.QLabel(self.groupBox_2)
        self.lbl_rBrand.setObjectName("lbl_rBrand")
        self.horizontalLayout_9.addWidget(self.lbl_rBrand)
        self.verticalLayout_6.addLayout(self.horizontalLayout_9)
        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
        self.label_7 = QtWidgets.QLabel(self.groupBox_2)
        self.label_7.setStyleSheet("background-color: rgb(255, 170, 127);")
        self.label_7.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
        self.label_7.setObjectName("label_7")
        self.horizontalLayout_7.addWidget(self.label_7)
        self.lbl_rSize = QtWidgets.QLabel(self.groupBox_2)
        self.lbl_rSize.setObjectName("lbl_rSize")
        self.horizontalLayout_7.addWidget(self.lbl_rSize)
        self.verticalLayout_6.addLayout(self.horizontalLayout_7)
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.label_9 = QtWidgets.QLabel(self.groupBox_2)
        self.label_9.setStyleSheet("background-color: rgb(0, 255, 0);\n"
                                   "background-color: rgb(255, 170, 255);")
        self.label_9.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter)
        self.label_9.setObjectName("label_9")
        self.horizontalLayout_5.addWidget(self.label_9)
        self.lbl_rType = QtWidgets.QLabel(self.groupBox_2)
        self.lbl_rType.setObjectName("lbl_rType")
        self.horizontalLayout_5.addWidget(self.lbl_rType)
        self.verticalLayout_6.addLayout(self.horizontalLayout_5)
        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.verticalLayout_6.addLayout(self.horizontalLayout_6)
        self.horizontalLayout_4.addLayout(self.verticalLayout_6)
        self.gridLayout_3.addLayout(self.horizontalLayout_4, 0, 0, 1, 1)
        self.gridLayout_2.addWidget(self.groupBox_2, 0, 0, 1, 1)
        self.horizontalLayout_3.addLayout(self.gridLayout_2)
        self.verticalLayout_5.addLayout(self.horizontalLayout_3)
        self.gridLayout.addLayout(self.verticalLayout_5, 0, 0, 1, 1)

        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)

    #绘制UI控件
    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("Form", "Form"))
        self.lbl_DeviceId.setText(_translate("Form", "N/A"))
        self.lbl_PortType.setText(_translate("Form", "N/A"))
        self.groupBox_2.setTitle(_translate("Form", "--【检测数据】--"))
        self.label_3.setText(_translate("Form", "DevicePath:"))
        self.lbl_rDevicePath.setText(_translate("Form", "N/A"))
        self.label_5.setText(_translate("Form", "品牌规格:"))
        self.lbl_rBrand.setText(_translate("Form", "N/A"))
        self.label_7.setText(_translate("Form", "容量:"))
        self.lbl_rSize.setText(_translate("Form", "N/A"))
        self.label_9.setText(_translate("Form", "类型:"))
        self.lbl_rType.setText(_translate("Form", "N/A"))

if __name__=='__main__':
    app=QApplication(sys.argv)
    win=Ui_UsbTestMainFrm()
    win.Center()  # 居中
    win.show()
    sys.exit(app.exec_())

展示UI

相关推荐
第九序言T3 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
Java后端的Ai之路3 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
qq_426003963 小时前
UI自动化高频次登录login限流解决方案
python·ui·自动化
Sakura_j_h_3 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
龙亘川4 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人4 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
quantdash_cc4 小时前
如何验证历史行情的交易日期是否完整覆盖研究区间?
python·数据分析·pandas·量化交易·股票数据·quantdash
I Am a robert girl4 小时前
当智能体学会“串通”:从长程交互中读懂涌现式合谋
python·多智能体系统·多智能体协作·llm agent·涌现式合谋·对齐问题·激励机制设计
Raas1005 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
云和数据.ChenGuang5 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain