UI界面:
实现代码
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file \'NetOpeningWinFrm.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 import * from PyQt5.Qt import * from PyQt5 import QtWidgets from PyQt5 import QtGui from PyQt5 import QtCore import logging import os import json import configparser import psutil #pip install psutil #import serial import subprocess import io #import glob #import re#正则表达式 #pip install pyserial class AnalysisThread(QtCore.QThread): test_result_signal = QtCore.pyqtSignal(tuple) # 新增信号,传递一个包含设备路径和测试结果的元组 finished_signal = QtCore.pyqtSignal() # 新增信号,表示线程完成 def __init__(self,devicepath,type,parent=None): super(AnalysisThread, self).__init__(parent) self.devicepath = devicepath self.type = type self.is_running = True def run(self): result = False index=0 if self.parent().rnetTestCount>0: index=self.parent().rnetTestCount-1 result = self.parent().GetTestPortInfoAndTest(self.devicepath) print(\'resutl:\',result) if result: print(\"Before removal:\", self.parent().rnetPortName) self.parent().rnetPortName.remove(self.devicepath) print(\"After removal:\", self.parent().rnetPortName) device_info = [] device_info.append(self.devicepath)#连接状态 device_info.append(self.parent().rnConnetcion[index])#连接状态 device_info.append(self.parent().rnetRate[index])#速率 device_info.append(self.parent().rnetMacAddress[index])#MacAddress self.parent().TableAddItem(device_info,True)#添加PASS数据 #端口数 self.parent().lbl_GetPortNum.setText(str(self.parent().rnetTestCount))#设置测试端口数 self.parent().lbl_GetPortNum.setStyleSheet(\"background-color: lightgreen;\") # 后置端口背景色设置为浅绿色 #连接状态 self.parent().lbl_GetConntion.setText(self.parent().rnConnetcion[index])#设置连接状态 self.parent().lbl_GetPortNum.setStyleSheet(\"background-color: lightgreen;\") # 后置端口背景色设置为浅绿色 #速率 self.parent().lbl_GetRate.setText(self.parent().rnetRate[index]+\'M\') self.parent().lbl_GetRate.setStyleSheet(\"background-color: lightgreen;\") # 后置端口背景色设置为浅绿色 else: if self.parent().rnetFailInfo: device_info = [] device_info.append(self.parent().rnetFailInfo[0]) device_info.append(self.parent().rnetFailInfo[1]) device_info.append(self.parent().rnetFailInfo[2]) device_info.append(self.parent().rnetFailInfo[3]) self.parent().TableAddItem(device_info, False) # 添加PASS数据 self.test_result_signal.emit((device_info,False)) # 端口数 self.parent().lbl_GetPortNum.setText(str(self.parent().rnetTestCount+1)) # 设置测试端口数 self.parent().lbl_GetPortNum.setStyleSheet(\"background-color: red;\") # 后置端口背景色设置为浅绿色 # 连接状态 self.parent().lbl_GetConntion.setText(self.parent().rnetFailInfo[1]) # 设置连接状态 self.parent().lbl_GetConntion.setStyleSheet(\"background-color: red;\") # 后置端口背景色设置为浅绿色 # 速率 self.parent().lbl_GetRate.setText(self.parent().rnetFailInfo[2] + \'M\') self.parent().lbl_GetRate.setStyleSheet(\"background-color: red;\") # 后置端口背景色设置为浅绿色 self.parent().lbl_Result.setStyleSheet(\"background-color: black; color: red;\") self.parent().lbl_Result.setText(\"测试FAIL!!\") 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.finished_threads = 0 # 用于跟踪完成的线程数 self.analysis_threads = [] # 存储所有的 AnalysisThread 实例 self.Err=\'\'#错误信息 self.config = configparser.ConfigParser() # 创建对象 self.itemName = \'\' # 项目名称 self.testArgs = [] # 测试参数信息 self.testStandardArgs = \'\' # 测试准标参数 #参数信息 self.anetTestCount=1#网卡测试端口数 self.anetRate=[]#网卡速率 #读取的网卡信息 self.rnetTestCount=0#网卡测试端口数 self.rnetPortName=[]#获取所有网络接口名称 self.rnetRate=[]#网卡速率 self.rnetMacAddress=[]#网卡MACAddress self.rnConnetcion=[]#连接状态 self.rnetFailInfo=[]#读取的fail信息 # 生成日志信息 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\', \'NetOpening\') # 项目名称 self.itemFailSleepExit = int(self.config.get(\'TestItemWinFrmSleepExit\', \'NetOpening\')) # 项目测试Fail延时退出 self.testArgs = self.ReadJsonInfo(\'./Conf/TestArgs.json\') # 读取测试参数信息 if self.ReadJsonTestArgs(self.itemName)==True:#获取标准参数 testArgs=[]#测试参数 testArgs=self.testStandardArgs.split(\'|\') testCount=testArgs[0]#测试端口数 netRate=testArgs[1]#测试速率 self.anetTestCount=int(testCount[testCount.find(\'=\')+1:]) self.anetRate=netRate[netRate.find(\'=\')+1:].split(\',\')#截取速率信息 self.setupUi()#初始化 self.lbl_Result.setStyleSheet(\"background-color: black; color: red;\") self.rnetPortName=self.get_network_interfaces() for rn in self.rnetPortName: if \'lo\' in rn: self.rnetPortName.remove(rn) break if len(self.rnetPortName)!=self.anetTestCount:#获取测试接口信息 self.lbl_GetPortNum.setText(str(len(self.rnetPortName))) self.lbl_GetPortNum.setStyleSheet(\"color: red;\") self.lbl_Result.setStyleSheet(\"background-color: black; color: red;\") self.ShowLog(f\"侦测试网络适配器数量与参数不匹配 Err:{self.rnetPortName}\", False) self.Err=f\"侦测试网络适配器数量与参数不匹配 Err:{self.rnetPortName}\"; # 创建一个定时器来检查视频是否播放结束 self.timer = QTimer(self) self.timer.setInterval(1000) # 每秒检查一次 self.timer.timeout.connect(self.check_Test) self.timer.start() # 连接信号到槽 self.updateTimer.connect(self.handleTimer) #获取所有网络接口名称 def get_network_interfaces(self): return list(psutil.net_if_addrs().keys()) def get_net_interfaces(self): net_if_addrs = psutil.net_if_addrs() return net_if_addrs #获取端口信息及测试 interface_name:适配置器名称 def GetTestPortInfoAndTest(self,interface_name): try: self.rnetFailInfo.clear()#清空fail信息 testdata=self.get_interface_details(interface_name) self.label_2.setText(f\'当前{interface_name} 端口测试..\') if self.Err is None: self.lbl_Result.setStyleSheet(\"background-color: black; color: lightyellow;\") self.lbl_Result.setText(\"测试中..\") else: self.lbl_Result.setStyleSheet(\"background-color: black; color: red;\") self.lbl_Result.setText(self.Err) if testdata and testdata[\'speed\'] and testdata[\'operstate\'] and testdata[\'mac_address\']: if int(self.anetRate[self.rnetTestCount])==int(testdata[\'speed\']): self.rnetMacAddress.append(testdata[\'mac_address\']) self.rnetRate.append(testdata[\'speed\']) self.rnConnetcion.append(testdata[\'operstate\']) self.rnetTestCount+=1 return True else: self.rnetFailInfo.append(interface_name) self.rnetFailInfo.append(testdata[\'operstate\']) self.rnetFailInfo.append(testdata[\'speed\']) self.rnetFailInfo.append(testdata[\'mac_address\']) return False else: return False except Exception as e: self.ShowLog(f\"GetTestPortInfoAndTest Err:{e}\", False) return False def read_sys_file(self,path): try: with open(path, \'r\') as file: return file.read().strip() except IOError: return None def get_interface_details(self,interface): speed = self.read_sys_file(f\'/sys/class/net/{interface}/speed\') operstate = self.read_sys_file(f\'/sys/class/net/{interface}/operstate\') mac_address = self.read_sys_file(f\'/sys/class/net/{interface}/address\') return { \'speed\': speed, \'operstate\': operstate, \'mac_address\': mac_address } # 定义触发器 def handleTimer(self, start): if start: self.timer.start() else: self.timer.stop() # 启动多线程 def start_analysis_threads(self): # 创建多个线程 self.finished_threads = 0 # 重置计数器 self.analysis_threads = [] # 重置线程列表 print(\"Remaining devices to test:\", self.rnetPortName) # 打印剩余的设备列表 #self.threads = [] for portname in self.rnetPortName: thread=AnalysisThread(portname,\'lan\',self) thread.test_result_signal.connect(self.handle_test_result) # 连接信号 thread.finished_signal.connect(self.thread_finished) thread.start() #self.threads.append(thread) self.analysis_threads.append(thread) # 判断是否所有线程都执行完成 def thread_finished(self): self.finished_threads += 1 if self.finished_threads == len(self.analysis_threads): self.updateTimer.emit(True) # 所有线程完成后重新启动定时器 # def handle_test_result(self, result): devicepath, isPass = result if isPass: # 如果测试通过,从待测试列表中移除该设备 if devicepath in self.rnetPortName: self.rnetPortName.remove(devicepath) self.TableAddItem(devicepath, isPass) # 校验是否完成测试 def check_Test(self): if self.anetTestCount==self.rnetTestCount: macinfo=\'\'#mac信息 rate=\'\'#速率 for mac in self.rnetMacAddress: macinfo+=mac+\',\' macinfo=macinfo[:-1] #去掉最后一个字符 for rte in self.anetRate: rate+=rte+\',\' rate=rate[:-1]#去掉最后一个字符 self.UpdateJsonTestArgs(self.itemName,f\'PortNum={self.anetTestCount}|MAC={macinfo}|Rate={rate}\',\'PASS\') self.lbl_Result.setStyleSheet(\"background-color: black; color: green;\") self.lbl_Result.setText(\"测试PASS!!\") sys.exit(0) elif self.finished_threads < len(self.analysis_threads): # 等待所有线程完成 pass else: self.updateTimer.emit(False) # 重新启动定时器 self.start_analysis_threads() def setupUi(self): self.setObjectName(\"Form\") self.resize(1006, 800) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(\"IMAGE/lan.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.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName(\"horizontalLayout_2\") self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setObjectName(\"verticalLayout_2\") self.horizontalLayout_6 = QtWidgets.QHBoxLayout() self.horizontalLayout_6.setObjectName(\"horizontalLayout_6\") 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_6.addWidget(self.lbl_Logo) self.label_3 = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.label_3.setFont(font) self.label_3.setStyleSheet(\"color: rgb(255, 255, 255);\\n\" \"background-color: rgb(170, 170, 127);\") self.label_3.setAlignment(QtCore.Qt.AlignCenter) self.label_3.setObjectName(\"label_3\") self.horizontalLayout_6.addWidget(self.label_3) self.verticalLayout_2.addLayout(self.horizontalLayout_6) self.label_2 = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(14) self.label_2.setFont(font) self.label_2.setStyleSheet(\"background-color: rgb(85, 255, 127);\") self.label_2.setAlignment(QtCore.Qt.AlignCenter) self.label_2.setObjectName(\"label_2\") self.verticalLayout_2.addWidget(self.label_2) self.horizontalLayout_2.addLayout(self.verticalLayout_2) self.horizontalLayout.addLayout(self.horizontalLayout_2) self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setObjectName(\"verticalLayout_3\") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName(\"horizontalLayout_3\") self.label_7 = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.label_7.setFont(font) self.label_7.setStyleSheet(\"background-color: rgb(170, 170, 127);\\n\" \"color: rgb(255, 255, 255);\") self.label_7.setAlignment(QtCore.Qt.AlignCenter) self.label_7.setObjectName(\"label_7\") self.horizontalLayout_3.addWidget(self.label_7) self.label_8 = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.label_8.setFont(font) self.label_8.setStyleSheet(\"background-color: rgb(85, 170, 127);\\n\" \"color: rgb(255, 255, 255);\") self.label_8.setAlignment(QtCore.Qt.AlignCenter) self.label_8.setObjectName(\"label_8\") self.horizontalLayout_3.addWidget(self.label_8) self.label_6 = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.label_6.setFont(font) self.label_6.setStyleSheet(\"background-color: rgb(170, 255, 127);\\n\" \"color: rgb(255, 255, 255);\") self.label_6.setAlignment(QtCore.Qt.AlignCenter) self.label_6.setObjectName(\"label_6\") self.horizontalLayout_3.addWidget(self.label_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, 0);\\n\" \"color: rgb(255, 255, 255);\") self.label_5.setAlignment(QtCore.Qt.AlignCenter) self.label_5.setObjectName(\"label_5\") self.horizontalLayout_3.addWidget(self.label_5) self.verticalLayout_3.addLayout(self.horizontalLayout_3) self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName(\"horizontalLayout_4\") self.label_10 = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.label_10.setFont(font) self.label_10.setAlignment(QtCore.Qt.AlignCenter) self.label_10.setObjectName(\"label_10\") self.horizontalLayout_4.addWidget(self.label_10) self.lbl_SetPortNum = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.lbl_SetPortNum.setFont(font) self.lbl_SetPortNum.setAlignment(QtCore.Qt.AlignCenter) self.lbl_SetPortNum.setObjectName(\"lbl_SetPortNum\") self.horizontalLayout_4.addWidget(self.lbl_SetPortNum) self.lbl_SetConntion = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.lbl_SetConntion.setFont(font) self.lbl_SetConntion.setAlignment(QtCore.Qt.AlignCenter) self.lbl_SetConntion.setObjectName(\"lbl_SetConntion\") self.horizontalLayout_4.addWidget(self.lbl_SetConntion) self.lbl_SetRate = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.lbl_SetRate.setFont(font) self.lbl_SetRate.setAlignment(QtCore.Qt.AlignCenter) self.lbl_SetRate.setObjectName(\"lbl_SetRate\") self.horizontalLayout_4.addWidget(self.lbl_SetRate) self.verticalLayout_3.addLayout(self.horizontalLayout_4) self.horizontalLayout_5 = QtWidgets.QHBoxLayout() self.horizontalLayout_5.setObjectName(\"horizontalLayout_5\") self.label_12 = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.label_12.setFont(font) self.label_12.setAlignment(QtCore.Qt.AlignCenter) self.label_12.setObjectName(\"label_12\") self.horizontalLayout_5.addWidget(self.label_12) self.lbl_GetPortNum = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.lbl_GetPortNum.setFont(font) self.lbl_GetPortNum.setAlignment(QtCore.Qt.AlignCenter) self.lbl_GetPortNum.setObjectName(\"lbl_GetPortNum\") self.horizontalLayout_5.addWidget(self.lbl_GetPortNum) self.lbl_GetConntion = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.lbl_GetConntion.setFont(font) self.lbl_GetConntion.setAlignment(QtCore.Qt.AlignCenter) self.lbl_GetConntion.setObjectName(\"lbl_GetConntion\") self.horizontalLayout_5.addWidget(self.lbl_GetConntion) self.lbl_GetRate = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(12) self.lbl_GetRate.setFont(font) self.lbl_GetRate.setAlignment(QtCore.Qt.AlignCenter) self.lbl_GetRate.setObjectName(\"lbl_GetRate\") self.horizontalLayout_5.addWidget(self.lbl_GetRate) self.verticalLayout_3.addLayout(self.horizontalLayout_5) self.horizontalLayout.addLayout(self.verticalLayout_3) self.verticalLayout.addLayout(self.horizontalLayout) self.tableWidget = QtWidgets.QTableWidget(self) font = QtGui.QFont() font.setPointSize(12) self.tableWidget.setFont(font) self.tableWidget.setObjectName(\"tableWidget\") self.tableWidget.setColumnCount(6) self.tableWidget.setRowCount(0) # 初始化表格行数为0 self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) item.setFont(font) item.setBackground(QtGui.QColor(170, 170, 127)) self.tableWidget.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) item.setFont(font) item.setBackground(QtGui.QColor(0, 170, 127)) self.tableWidget.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) item.setFont(font) item.setBackground(QtGui.QColor(170, 255, 127)) self.tableWidget.setHorizontalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) item.setFont(font) item.setBackground(QtGui.QColor(255, 170, 127)) self.tableWidget.setHorizontalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) item.setFont(font) item.setBackground(QtGui.QColor(85, 255, 127)) self.tableWidget.setHorizontalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() item.setTextAlignment(QtCore.Qt.AlignCenter) font = QtGui.QFont() font.setPointSize(12) item.setFont(font) item.setBackground(QtGui.QColor(85, 255, 0)) self.tableWidget.setHorizontalHeaderItem(5, item) self.verticalLayout.addWidget(self.tableWidget) self.lbl_Result = QtWidgets.QLabel(self) font = QtGui.QFont() font.setPointSize(18) self.lbl_Result.setFont(font) self.lbl_Result.setStyleSheet(\"background-color: rgb(0, 0, 0);\") self.lbl_Result.setAlignment(QtCore.Qt.AlignCenter) self.lbl_Result.setText(\"测试中..\") self.lbl_Result.setObjectName(\"lbl_Result\") self.verticalLayout.addWidget(self.lbl_Result) self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1) self.lbl_Result.setStyleSheet(\"background-color: black; color: red;\") self.retranslateUi() QtCore.QMetaObject.connectSlotsByName(self) self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint | QtCore.Qt.WindowCloseButtonHint) # 只显示最小化按钮和关闭按钮 def retranslateUi(self): _translate = QtCore.QCoreApplication.translate self.setWindowTitle(_translate(\"Form\", \"LAN Test\")) self.label_3.setText(_translate(\"Form\", \"控制过程\")) self.label_2.setText(_translate(\"Form\", \"当前 Realtek PCIe GbE Family Controller测试..\")) self.label_7.setText(_translate(\"Form\", \"测试参数名称\")) self.label_8.setText(_translate(\"Form\", \"端口数\")) self.label_6.setText(_translate(\"Form\", \"连接状态\")) self.label_5.setText(_translate(\"Form\", \"测试速率\")) self.label_10.setText(_translate(\"Form\", \"设置参数\")) self.lbl_SetPortNum.setText(_translate(\"Form\", str(self.anetTestCount))) self.lbl_SetConntion.setText(_translate(\"Form\", \"True\")) self.lbl_SetRate.setText(_translate(\"Form\", f\'{str(self.anetRate[0])}M\')) self.label_12.setText(_translate(\"Form\", \"当前测试状态\")) self.lbl_GetPortNum.setText(_translate(\"Form\", \"N/A\")) self.lbl_GetConntion.setText(_translate(\"Form\", \"N/A\")) self.lbl_GetRate.setText(_translate(\"Form\", \"N/A\")) item = self.tableWidget.horizontalHeaderItem(0) item.setText(_translate(\"Form\", \"NO\")) item = self.tableWidget.horizontalHeaderItem(1) item.setText(_translate(\"Form\", \"项目名称\")) item = self.tableWidget.horizontalHeaderItem(2) item.setText(_translate(\"Form\", \"连接状态\")) item = self.tableWidget.horizontalHeaderItem(3) item.setText(_translate(\"Form\", \"速率\")) item = self.tableWidget.horizontalHeaderItem(4) item.setText(_translate(\"Form\", \"MacAddress\")) item = self.tableWidget.horizontalHeaderItem(5) item.setText(_translate(\"Form\", \"测试结果\")) self.lbl_Result.setText(_translate(\"COMLPTTest\", \"测试中..\")) self.tableWidget.setColumnWidth(0,60) self.tableWidget.setColumnWidth(1,140) self.tableWidget.setColumnWidth(2,140) self.tableWidget.setColumnWidth(3,140) self.tableWidget.setColumnWidth(4,280) self.tableWidget.setColumnWidth(5,200) self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers) # 表格状态只读 self.tableWidget.clicked.connect(self.TestThread) # 表单,单击事件 #读取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) # 读取项目参数信息,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) #手动关闭窗口 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() 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.lbl_Result.setStyleSheet(\"color:green;\") self.logger.info(str(log)) self.lbl_Result.setText(\"TEST PASS\") else: self.lbl_Result.setStyleSheet(\"color:red;\") self.logger.error(str(log)) self.lbl_Result.setText(log) except Exception as e: print(\"\\033[1;31m\" + str(e) + \" \\033[0m\") 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 TableAddItem(self, port, isPass): # # 检查设备是否已经在表格中 # for rowIndex in range(self.tableWidget.rowCount()): # print(\'port\',port) # if self.tableWidget.item(rowIndex, 1) and self.tableWidget.item(rowIndex, 2): # if self.tableWidget.item(rowIndex, 1).text() == port[0] and self.tableWidget.item(rowIndex, 2).text() == port[1] and self.tableWidget.item(rowIndex,3).text()==port[2]: # # 更新现有行的测试结果 # testResult = \'PASS\' if isPass else \'FAIL\' # self.tableWidget.item(rowIndex, 4).setText(testResult) # if testResult == \'PASS\': # self.tableWidget.item(rowIndex, 4).setForeground(QtGui.QColor(51, 204, 51)) # else: # self.tableWidget.item(rowIndex, 4).setForeground(QtGui.QColor(255, 51, 51)) # return def TableAddItem(self, port, isPass): # 检查设备是否已经在表格中 rowToUpdate = None print(\'self.tableWidget.rowCount()\',self.tableWidget.rowCount()) for rowIndex in range(self.tableWidget.rowCount()): if self.tableWidget.item(rowIndex, 1) and self.tableWidget.item(rowIndex, 2): if self.tableWidget.item(rowIndex, 1).text() == port[0] and self.tableWidget.item(rowIndex, 2).text() == \\ port[1]: rowToUpdate = rowIndex break if rowToUpdate is not None: # 更新现有行 testResult = \'PASS\' if isPass else \'FAIL\' self.tableWidget.item(rowToUpdate, 5).setText(testResult) if testResult == \'PASS\': self.tableWidget.item(rowToUpdate, 5).setForeground(QtGui.QColor(51, 204, 51)) else: self.tableWidget.item(rowToUpdate, 5).setForeground(QtGui.QColor(255, 51, 51)) else: # 添加新行 newRow = self.tableWidget.rowCount() self.tableWidget.insertRow(newRow) self.tableWidget.setRowCount(newRow + 1) # 增加表格行数 # ... 添加数据到新行 ... # 添加数据到新行 self.tableWidget.setItem(newRow, 0, QTableWidgetItem(str(newRow + 1))) self.tableWidget.setItem(newRow, 1, QTableWidgetItem(port[0])) self.tableWidget.setItem(newRow, 2, QTableWidgetItem(port[1])) self.tableWidget.setItem(newRow, 3, QTableWidgetItem(port[2])) self.tableWidget.setItem(newRow, 4, QTableWidgetItem(port[3])) testResult = \'PASS\' if isPass else \'FAIL\' resultItem = QTableWidgetItem(testResult) resultItem.setTextAlignment(Qt.AlignCenter) self.tableWidget.setItem(newRow, 5, resultItem) if testResult == \'PASS\': resultItem.setForeground(QtGui.QColor(51, 204, 51)) else: resultItem.setForeground(QtGui.QColor(255, 51, 51)) #启动线重脚本 def TestThread(self): pass #self.t_autoplay=Thread(target=self.Test) #self.t_autoplay.start() if __name__==\'__main__\': app=QApplication(sys.argv) win=Ui_Form() win.Center() # 居中 win.show() sys.exit(app.exec_())
© 版权声明
THE END
暂无评论内容