151 lines
6.0 KiB
Python
151 lines
6.0 KiB
Python
|
|
#!/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()
|