Files
dtm-py-all/UI/reserved/test_arrangement_view.py

151 lines
6.0 KiB
Python
Raw Normal View History

#!/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()