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

151 lines
6.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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