#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 试验安排与监控视图 """ from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel, QTableWidget, QTableWidgetItem, QGroupBox, QPushButton, QMessageBox, QComboBox) from PyQt5.QtCore import Qt class TestArrangementView(QWidget): def __init__(self): super().__init__() self.filter_mode = 2 # 默认过滤模式 self.init_ui() self.load_data() def init_ui(self): """初始化界面""" layout = QVBoxLayout(self) layout.setSpacing(15) # 标题 title_label = QLabel("试验安排与监控") title_label.setObjectName("title") layout.addWidget(title_label) # 过滤控制 filter_layout = QHBoxLayout() filter_label = QLabel("过滤模式:") self.mode_combo = QComboBox() self.mode_combo.addItems(["全部", "Mode 0", "Mode 2", "Mode 3", "Mode 13", "Mode 20", "Mode 25", "Mode 33"]) self.mode_combo.setCurrentIndex(2) # 默认选择Mode 2 self.mode_combo.currentIndexChanged.connect(self.on_mode_changed) refresh_btn = QPushButton("刷新") refresh_btn.clicked.connect(self.load_data) filter_layout.addWidget(filter_label) filter_layout.addWidget(self.mode_combo) filter_layout.addStretch() filter_layout.addWidget(refresh_btn) layout.addLayout(filter_layout) # 注意信息 notice_label = QLabel("注意:当前数据库中仅包含特定dutDirectionMode值的数据") notice_label.setStyleSheet("color: #e74c3c; font-size: 14px;") layout.addWidget(notice_label) # 数据统计 stats_group = QGroupBox("数据统计") stats_layout = QHBoxLayout(stats_group) self.total_count_label = QLabel("总试验数: 0") self.filtered_count_label = QLabel("过滤后试验数: 0") self.filtered_count_label.setStyleSheet("color: #27ae60;") stats_layout.addWidget(self.total_count_label) stats_layout.addWidget(self.filtered_count_label) stats_layout.addStretch() layout.addWidget(stats_group) # 试验列表 self.test_table = QTableWidget() self.test_table.setColumnCount(6) self.test_table.setHorizontalHeaderLabels(["ID", "名称", "项目", "状态", "Mode值", "操作"]) self.test_table.setAlternatingRowColors(True) self.test_table.setSelectionBehavior(self.test_table.SelectRows) layout.addWidget(self.test_table) def on_mode_changed(self, index): """过滤模式改变""" mode_map = {0: None, 1: 0, 2: 2, 3: 3, 4: 13, 5: 20, 6: 25, 7: 33} self.filter_mode = mode_map.get(index) self.load_data() def load_data(self): """加载数据""" # 这里应该从控制器获取数据,现在使用示例数据 test_data = [ {"id": 1, "name": "测试1", "project": "项目A", "status": "运行中", "dutDirectionMode": 2}, {"id": 2, "name": "测试2", "project": "项目B", "status": "待开始", "dutDirectionMode": 0}, {"id": 3, "name": "测试3", "project": "项目C", "status": "已完成", "dutDirectionMode": 33}, {"id": 4, "name": "测试4", "project": "项目D", "status": "运行中", "dutDirectionMode": 13}, {"id": 5, "name": "测试5", "project": "项目E", "status": "待开始", "dutDirectionMode": 20}, ] # 应用过滤 if self.filter_mode is not None: filtered_data = [item for item in test_data if item["dutDirectionMode"] == self.filter_mode] else: filtered_data = test_data # 更新统计数据 self.total_count_label.setText(f"总试验数: {len(test_data)}") self.filtered_count_label.setText(f"过滤后试验数: {len(filtered_data)}") # 填充表格 self.test_table.setRowCount(len(filtered_data)) for row, test in enumerate(filtered_data): # ID列 item_id = QTableWidgetItem(str(test["id"])) item_id.setFlags(item_id.flags() & ~Qt.ItemIsEditable) self.test_table.setItem(row, 0, item_id) # 名称列 item_name = QTableWidgetItem(test["name"]) item_name.setFlags(item_name.flags() & ~Qt.ItemIsEditable) self.test_table.setItem(row, 1, item_name) # 项目列 item_project = QTableWidgetItem(test["project"]) item_project.setFlags(item_project.flags() & ~Qt.ItemIsEditable) self.test_table.setItem(row, 2, item_project) # 状态列 item_status = QTableWidgetItem(test["status"]) item_status.setFlags(item_status.flags() & ~Qt.ItemIsEditable) self.test_table.setItem(row, 3, item_status) # Mode值列 item_mode = QTableWidgetItem(str(test["dutDirectionMode"])) item_mode.setFlags(item_mode.flags() & ~Qt.ItemIsEditable) if test["dutDirectionMode"] == 2: item_mode.setForeground(Qt.darkGreen) else: item_mode.setForeground(Qt.black) self.test_table.setItem(row, 4, item_mode) # 操作列 btn_view = QPushButton("查看") btn_view.clicked.connect(lambda checked, tid=test["id"]: self.view_test(tid)) self.test_table.setCellWidget(row, 5, btn_view) # 调整列宽 self.test_table.resizeColumnsToContents() def view_test(self, test_id): """查看试验详情""" QMessageBox.information(self, "查看试验", f"查看试验 ID: {test_id}") def update_view(self): """更新视图""" self.load_data()