""" 配置类型选择对话框集成到主程序的代码示例 """ # ============================================================ # 1. 在文件顶部添加导入 # ============================================================ from config_type_selector import ( ConfigTypeSelectorDialog, select_config_for_work_order, select_config_for_settings ) from config_category import ConfigCategory # ============================================================ # 2. 修改"配置"按钮的点击处理 # ============================================================ def open_config_dialog(self, preview: bool = False) -> None: """ 打开配置对话框 先让用户选择配置类型,然后打开对应的配置页面 """ # 第一步:让用户选择配置类型 category = select_config_for_settings(self) if category is None: # 用户取消了选择 return self.logger.info(f"用户选择配置类型: {category.name}") # 第二步:加载选择的配置类型 try: # 临时保存当前配置路径 original_autosave_path = self._autosave_path original_config = self.config # 加载选择的配置类型 self.config = AppConfig.load(category.config_path) self._autosave_path = category.config_path # 如果有模板,也加载 if category.template_path and category.template_path.exists(): self.template_path = category.template_path self.logger.info(f"已加载配置类型 {category.name} 的配置") except Exception as e: self.logger.error(f"加载配置类型失败: {e}") QMessageBox.warning(self, "错误", f"加载配置类型失败:\n{e}") return # 第三步:打开配置对话框(原有的配置对话框代码) # ... 这里是原有的配置对话框代码 ... # 注意:在对话框顶部显示当前编辑的配置类型 dlg = QDialog(self) dlg.setWindowTitle(f"配置设置 - {category.name}") # 标题显示配置类型 dlg.resize(900, 700) # 在对话框顶部添加配置类型提示 dlg_layout = QVBoxLayout() # 配置类型提示标签 type_info = QLabel(f"📁 当前编辑: {category.name}") type_info.setStyleSheet(""" QLabel { background-color: #e3f2fd; color: #1976d2; padding: 10px; border-radius: 5px; font-size: 13px; font-weight: bold; } """) dlg_layout.addWidget(type_info) # ... 原有的配置对话框内容 ... # 保存按钮处理 def on_save(): try: # 应用UI修改到配置 self.apply_ui_to_config() # 保存到选择的配置类型文件 self.config.save(category.config_path) self.logger.info(f"配置已保存到: {category.config_path}") QMessageBox.information( dlg, "保存成功", f"配置已保存到 {category.name}" ) dlg.accept() except Exception as e: self.logger.error(f"保存配置失败: {e}") QMessageBox.warning(dlg, "保存失败", f"保存配置失败:\n{e}") # ... 对话框的其他代码 ... # ============================================================ # 3. 修改"开始工单"按钮的点击处理 # ============================================================ def _start_work_order(self) -> None: """ 开始工单 先让用户选择配置类型,然后开始工单 """ # 第一步:让用户选择配置类型 category = select_config_for_work_order(self) if category is None: # 用户取消了选择 self.logger.info("用户取消了工单配置类型选择") return self.logger.info(f"用户为工单选择配置类型: {category.name}") # 第二步:加载选择的配置类型 try: self.config = AppConfig.load(category.config_path) self._autosave_path = category.config_path # 加载模板 if category.template_path and category.template_path.exists(): self.template_path = category.template_path self.logger.info(f"已加载模板: {category.template_path}") else: self.logger.warning(f"配置类型 {category.name} 没有模板文件") # 更新UI显示 self.apply_config_to_ui() self.logger.info(f"已加载配置类型 {category.name}") except Exception as e: self.logger.error(f"加载配置类型失败: {e}") QMessageBox.warning(self, "错误", f"加载配置类型失败:\n{e}") return # 第三步:弹出工单信息输入对话框 dlg = QDialog(self) dlg.setWindowTitle(f"开始工单 - {category.name}") dlg.resize(500, 400) layout = QVBoxLayout() # 显示选择的配置类型 type_info = QLabel(f"📁 配置类型: {category.name}") type_info.setStyleSheet(""" QLabel { background-color: #e8f5e9; color: #2e7d32; padding: 10px; border-radius: 5px; font-size: 13px; font-weight: bold; } """) layout.addWidget(type_info) # 工单信息输入表单 form_layout = QFormLayout() work_order_edit = QLineEdit() work_order_edit.setPlaceholderText("请输入工单号") form_layout.addRow("工单号:", work_order_edit) operator_edit = QLineEdit() operator_edit.setPlaceholderText("请输入操作员姓名") form_layout.addRow("操作员:", operator_edit) remark_edit = QTextEdit() remark_edit.setPlaceholderText("请输入备注信息(可选)") remark_edit.setMaximumHeight(100) form_layout.addRow("备注:", remark_edit) layout.addLayout(form_layout) # 按钮 button_layout = QHBoxLayout() button_layout.addStretch() ok_btn = QPushButton("开始") ok_btn.setStyleSheet(""" QPushButton { background-color: #2196F3; color: white; padding: 8px 20px; border-radius: 5px; font-weight: bold; } QPushButton:hover { background-color: #1976D2; } """) ok_btn.clicked.connect(dlg.accept) button_layout.addWidget(ok_btn) cancel_btn = QPushButton("取消") cancel_btn.clicked.connect(dlg.reject) button_layout.addWidget(cancel_btn) layout.addLayout(button_layout) dlg.setLayout(layout) # 显示对话框 if dlg.exec() != QDialog.Accepted: return # 获取工单信息 work_order_no = work_order_edit.text().strip() operator = operator_edit.text().strip() remark = remark_edit.toPlainText().strip() if not work_order_no: QMessageBox.warning(self, "提示", "请输入工单号") return # 第四步:开始工单(原有的开始工单逻辑) try: # 保存工单信息到全局参数 if hasattr(self.config, 'global_params'): self.config.global_params['work_order_no'] = work_order_no self.config.global_params['operator'] = operator if remark: self.config.global_params['remark'] = remark # 保存配置类型信息 self.config.global_params['config_type'] = category.name # 保存配置 self.config.save(category.config_path) self.logger.info( f"工单已开始 - 工单号: {work_order_no}, " f"操作员: {operator}, 配置类型: {category.name}" ) QMessageBox.information( self, "工单已开始", f"工单号: {work_order_no}\n" f"操作员: {operator}\n" f"配置类型: {category.name}\n\n" f"工单已开始,可以进行实验操作。" ) # ... 原有的开始工单后续逻辑 ... except Exception as e: self.logger.error(f"开始工单失败: {e}") QMessageBox.warning(self, "错误", f"开始工单失败:\n{e}") # ============================================================ # 4. 可选:添加快速切换配置类型的功能 # ============================================================ def _quick_switch_config_type(self) -> None: """快速切换配置类型(不打开配置对话框)""" category = ConfigTypeSelectorDialog.select_config_type( parent=self, title="切换配置类型", message="请选择要切换到的配置类型:" ) if category is None: return try: # 保存当前配置 if self._autosave_path: self.apply_ui_to_config() self.config.save(self._autosave_path) # 加载新配置 self.config = AppConfig.load(category.config_path) self._autosave_path = category.config_path if category.template_path: self.template_path = category.template_path # 更新UI self.apply_config_to_ui() self.logger.info(f"已切换到配置类型: {category.name}") QMessageBox.information( self, "切换成功", f"已切换到配置类型: {category.name}" ) except Exception as e: self.logger.error(f"切换配置类型失败: {e}") QMessageBox.warning(self, "错误", f"切换配置类型失败:\n{e}") # ============================================================ # 5. 完整的集成检查清单 # ============================================================ """ 集成检查清单: □ 1. 已添加导入语句 □ 2. 已修改"配置"按钮的点击处理(先选类型,再打开配置) □ 3. 已修改"开始工单"按钮的点击处理(先选类型,再开始工单) □ 4. 已在配置对话框标题显示配置类型 □ 5. 已在工单对话框显示配置类型 □ 6. 已测试配置类型选择功能 □ 7. 已测试配置保存到正确的类型文件 □ 8. 已测试工单使用正确的配置类型 测试步骤: 1. 点击"配置"按钮 - 应该弹出配置类型选择对话框 - 选择一个类型后,打开该类型的配置页面 - 修改配置后保存,应该保存到该类型的文件 2. 点击"开始工单"按钮 - 应该弹出配置类型选择对话框 - 选择一个类型后,显示工单信息输入对话框 - 输入工单信息后,使用该类型的配置开始工单 3. 验证配置隔离 - 修改"600泵"的配置 - 切换到"1000泵" - 验证"1000泵"的配置没有被影响 """ # ============================================================ # 6. 使用示例 # ============================================================ """ 使用示例: 场景1:用户点击"配置"按钮 ───────────────────────── 1. 弹出配置类型选择对话框 2. 用户选择"600泵" 3. 打开"600泵"的配置页面 4. 用户修改配置 5. 保存到 configs/600泵/default.json 场景2:用户点击"开始工单"按钮 ───────────────────────────── 1. 弹出配置类型选择对话框 2. 用户选择"1000泵" 3. 弹出工单信息输入对话框 4. 用户输入工单号、操作员等信息 5. 使用 configs/1000泵/default.json 的配置开始工单 6. 使用 configs/1000泵/template.docx 生成报告 场景3:用户需要快速切换配置类型 ───────────────────────────────── 1. 添加一个"切换配置类型"按钮(可选) 2. 点击后弹出配置类型选择对话框 3. 选择后立即切换,不打开配置对话框 """