From 51531b3a370b483068ba5ff9324adadecfa60061 Mon Sep 17 00:00:00 2001 From: zcwBit Date: Sat, 19 Jul 2025 23:45:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A7=84=E7=A8=8B=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E7=BB=93=E6=9E=9C=E7=BB=9F=E8=AE=A1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UI/ProcedureManager/StepExecutor.py | 109 ++++++++++++++++++--- model/ProcedureModel/ProcedureProcessor.py | 6 ++ 2 files changed, 104 insertions(+), 11 deletions(-) diff --git a/UI/ProcedureManager/StepExecutor.py b/UI/ProcedureManager/StepExecutor.py index a59c102..c7aac1a 100644 --- a/UI/ProcedureManager/StepExecutor.py +++ b/UI/ProcedureManager/StepExecutor.py @@ -193,8 +193,20 @@ class StepExecutor(QWidget): self.tableView.setEditTriggers(QTableView.DoubleClicked) self.tableView.setSelectionBehavior(QTableView.SelectRows) + # 设置表格显示优化 + self.tableView.setAlternatingRowColors(True) # 交替行颜色 + self.tableView.setShowGrid(True) # 显示网格线 + self.tableView.setGridStyle(Qt.SolidLine) # 实线网格 + self.tableView.setSortingEnabled(False) # 禁用排序避免干扰执行顺序 + + # 设置最小行高 + self.tableView.verticalHeader().setMinimumSectionSize(30) + self.setupTableHeaders() + # 初始调整所有行高 + self.adjustAllRowHeights() + layout.addWidget(QLabel("测试步骤:")) layout.addWidget(self.tableView) @@ -212,14 +224,34 @@ class StepExecutor(QWidget): try: header = self.tableView.horizontalHeader() if header: - header.setStretchLastSection(True) - header.setSectionResizeMode(0, QHeaderView.ResizeToContents) - header.setSectionResizeMode(1, QHeaderView.Stretch) - header.setSectionResizeMode(2, QHeaderView.ResizeToContents) - header.setSectionResizeMode(3, QHeaderView.ResizeToContents) - header.setSectionResizeMode(4, QHeaderView.ResizeToContents) - header.setSectionResizeMode(5, QHeaderView.ResizeToContents) - header.setSectionResizeMode(6, QHeaderView.ResizeToContents) + # 设置表格自动调整行高 + self.tableView.verticalHeader().setDefaultSectionSize(35) + self.tableView.verticalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) + + # 设置列宽模式 - 让表格填充满整个宽度 + header.setStretchLastSection(True) # 让最后一列自动拉伸填充剩余空间 + + # 设置各列的调整模式 + header.setSectionResizeMode(0, QHeaderView.Fixed) # 步骤ID - 固定宽度 + header.setSectionResizeMode(1, QHeaderView.Stretch) # 步骤描述 - 拉伸 + header.setSectionResizeMode(2, QHeaderView.Fixed) # 操作类型 - 固定宽度 + header.setSectionResizeMode(3, QHeaderView.Fixed) # 执行时间 - 固定宽度 + header.setSectionResizeMode(4, QHeaderView.Fixed) # 执行结果 - 固定宽度 + header.setSectionResizeMode(5, QHeaderView.Stretch) # 详细结果 - 拉伸 + header.setSectionResizeMode(6, QHeaderView.Stretch) # 备注 - 拉伸 + + # 设置固定列的宽度 + self.tableView.setColumnWidth(0, 80) # 步骤ID + self.tableView.setColumnWidth(2, 120) # 操作类型 + self.tableView.setColumnWidth(3, 160) # 执行时间 + self.tableView.setColumnWidth(4, 80) # 执行结果 + + # 设置拉伸列的最小宽度 + header.setMinimumSectionSize(100) # 设置所有列的最小宽度 + + # 启用文本换行 + self.tableView.setWordWrap(True) + except Exception as e: print(f"设置表格头部时出错: {e}") @@ -522,6 +554,54 @@ class StepExecutor(QWidget): stepInterval = int(self.stepIntervalSpin.value() * 1000) self.timer.start(stepInterval) + def is_step_successful(self, step): + """判断步骤是否执行成功""" + return (step.get('executed', False) and + step.get('result') and + '失败' not in step.get('result', '')) + + def adjustRowHeight(self, row): + """调整指定行的高度以适应内容""" + try: + # 获取该行的内容 + stepInfo = self.tableModel.getStepInfo(row) + if not stepInfo: + return + + # 计算需要的行高 + description = stepInfo.get('description', '') + result = stepInfo.get('result', '') + note = stepInfo.get('note', '') + + # 基于最长文本计算行高 + max_text_length = max(len(description), len(result), len(note)) + + # 基础行高 + base_height = 35 + + # 根据文本长度动态调整 + if max_text_length > 100: + height = base_height + (max_text_length // 50) * 15 + elif max_text_length > 50: + height = base_height + 15 + else: + height = base_height + + # 设置行高,最大不超过150像素 + height = min(height, 150) + self.tableView.setRowHeight(row, height) + + except Exception as e: + print(f"调整行高时出错: {e}") + + def adjustAllRowHeights(self): + """调整所有行的高度""" + try: + for row in range(self.tableModel.rowCount()): + self.adjustRowHeight(row) + except Exception as e: + print(f"调整所有行高时出错: {e}") + def finishExecution(self): """完成执行""" self.stopAutoExecute() @@ -529,7 +609,7 @@ class StepExecutor(QWidget): # 计算最终执行统计 totalSteps = len([step for step in self.tableModel.stepData]) executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)]) - successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)]) + successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)]) failedSteps = executedSteps - successSteps successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0 @@ -607,6 +687,10 @@ class StepExecutor(QWidget): self.dbManager.updateStepResults(self.currentExecutionId, self.stepResults) success = self.tableModel.updateStepResult(row, result, datetime.now()) + + # 更新表格行高以适应内容 + self.adjustRowHeight(row) + return result def handleStep(self, rowIndex, stepInfo): @@ -829,6 +913,9 @@ class StepExecutor(QWidget): self.tabLockRequired.emit(False) self.updateStatusDisplay("已重置", "blue") self.resetCountdown() + + # 重置后重新调整行高 + self.adjustAllRowHeights() def onExportReportClicked(self): """导出报告点击事件""" @@ -940,7 +1027,7 @@ class StepExecutor(QWidget): """添加执行统计表格""" totalSteps = len([step for step in self.tableModel.stepData]) executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)]) - successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False) and step.get('result', False)]) + successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)]) failedSteps = executedSteps - successSteps successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0 @@ -1028,7 +1115,7 @@ class StepExecutor(QWidget): """添加执行总结""" totalSteps = len([step for step in self.tableModel.stepData]) executedSteps = len([step for step in self.tableModel.stepData if step.get('executed', False)]) - successSteps = len([step for step in self.tableModel.stepData if step.get('executed', False) and step.get('result', False)]) + successSteps = len([step for step in self.tableModel.stepData if self.is_step_successful(step)]) failedSteps = executedSteps - successSteps successRate = (successSteps/executedSteps*100) if executedSteps > 0 else 0 diff --git a/model/ProcedureModel/ProcedureProcessor.py b/model/ProcedureModel/ProcedureProcessor.py index 53f90a0..c20f397 100644 --- a/model/ProcedureModel/ProcedureProcessor.py +++ b/model/ProcedureModel/ProcedureProcessor.py @@ -166,6 +166,12 @@ class StepTableModel(QAbstractTableModel): elif step['isMain']: return QBrush(QColor(220, 220, 220)) + elif role == Qt.TextAlignmentRole: + if col in [0, 2, 3, 4]: # 步骤ID、操作类型、执行时间、执行结果居中对齐 + return Qt.AlignCenter + else: # 其他列左对齐并顶部对齐 + return Qt.AlignLeft | Qt.AlignTop + elif role == Qt.FontRole and step['isMain']: font = QFont() font.setBold(True)