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

220 lines
7.9 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
DUT管理视图Device Under Test - 试验样品管理
"""
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel,
QTableWidget, QTableWidgetItem, QGroupBox,
QPushButton, QLineEdit, QComboBox, QMessageBox)
from PyQt5.QtCore import Qt
class DUTManagementView(QWidget):
def __init__(self):
super().__init__()
self.current_dut = None
self.init_ui()
self.load_data()
def init_ui(self):
"""初始化界面"""
layout = QVBoxLayout(self)
layout.setSpacing(15)
# 标题
title_label = QLabel("DUT管理")
title_label.setObjectName("title")
layout.addWidget(title_label)
# 数据统计
stats_group = QGroupBox("数据统计")
stats_layout = QHBoxLayout(stats_group)
self.dut_count_label = QLabel("DUT总数: 0")
stats_layout.addWidget(self.dut_count_label)
stats_layout.addStretch()
layout.addWidget(stats_group)
# 主体区域
main_layout = QHBoxLayout()
# DUT列表
list_group = QGroupBox("DUT列表")
list_layout = QVBoxLayout(list_group)
self.dut_table = QTableWidget()
self.dut_table.setColumnCount(4)
self.dut_table.setHorizontalHeaderLabels(["ID", "名称", "状态", "操作"])
self.dut_table.setAlternatingRowColors(True)
self.dut_table.setSelectionBehavior(self.dut_table.SelectRows)
self.dut_table.cellClicked.connect(self.on_dut_selected)
list_layout.addWidget(self.dut_table)
main_layout.addWidget(list_group, 1)
# DUT详情
detail_group = QGroupBox("DUT详情")
detail_layout = QVBoxLayout(detail_group)
# 名称输入
name_layout = QHBoxLayout()
name_layout.addWidget(QLabel("名称:"))
self.name_input = QLineEdit()
name_layout.addWidget(self.name_input)
detail_layout.addLayout(name_layout)
# 描述输入
desc_layout = QHBoxLayout()
desc_layout.addWidget(QLabel("描述:"))
self.desc_input = QLineEdit()
desc_layout.addWidget(self.desc_input)
detail_layout.addLayout(desc_layout)
# 状态选择
status_layout = QHBoxLayout()
status_layout.addWidget(QLabel("状态:"))
self.status_combo = QComboBox()
self.status_combo.addItems(["Active", "Inactive"])
status_layout.addWidget(self.status_combo)
detail_layout.addLayout(status_layout)
# 操作按钮
btn_layout = QHBoxLayout()
self.save_btn = QPushButton("保存")
self.save_btn.clicked.connect(self.save_dut)
self.new_btn = QPushButton("新建")
self.new_btn.clicked.connect(self.new_dut)
self.delete_btn = QPushButton("删除")
self.delete_btn.clicked.connect(self.delete_dut)
btn_layout.addWidget(self.save_btn)
btn_layout.addWidget(self.new_btn)
btn_layout.addWidget(self.delete_btn)
detail_layout.addLayout(btn_layout)
main_layout.addWidget(detail_group, 1)
layout.addLayout(main_layout)
# 初始化按钮状态
self.update_button_states()
def load_data(self):
"""加载数据"""
# 这里应该从控制器获取数据,现在使用示例数据
self.dut_data = [
{"id": 1, "name": "DUT-A", "description": "DUT-A描述", "status": "Active"},
{"id": 2, "name": "DUT-B", "description": "DUT-B描述", "status": "Inactive"},
{"id": 3, "name": "DUT-C", "description": "DUT-C描述", "status": "Active"},
]
# 更新统计数据
self.dut_count_label.setText(f"DUT总数: {len(self.dut_data)}")
# 填充表格
self.dut_table.setRowCount(len(self.dut_data))
for row, dut in enumerate(self.dut_data):
# ID列
item_id = QTableWidgetItem(str(dut["id"]))
item_id.setFlags(item_id.flags() & ~Qt.ItemIsEditable)
self.dut_table.setItem(row, 0, item_id)
# 名称列
item_name = QTableWidgetItem(dut["name"])
item_name.setFlags(item_name.flags() & ~Qt.ItemIsEditable)
self.dut_table.setItem(row, 1, item_name)
# 状态列
item_status = QTableWidgetItem(dut["status"])
item_status.setFlags(item_status.flags() & ~Qt.ItemIsEditable)
if dut["status"] == "Active":
item_status.setForeground(Qt.darkGreen)
else:
item_status.setForeground(Qt.red)
self.dut_table.setItem(row, 2, item_status)
# 操作列
btn_edit = QPushButton("编辑")
btn_edit.clicked.connect(lambda checked, did=dut["id"]: self.edit_dut(did))
self.dut_table.setCellWidget(row, 3, btn_edit)
# 调整列宽
self.dut_table.resizeColumnsToContents()
def on_dut_selected(self, row, column):
"""DUT被选中"""
if row >= 0 and row < len(self.dut_data):
self.current_dut = self.dut_data[row]
self.populate_form()
self.update_button_states()
def populate_form(self):
"""填充表单"""
if self.current_dut:
self.name_input.setText(self.current_dut["name"])
self.desc_input.setText(self.current_dut["description"])
self.status_combo.setCurrentText(self.current_dut["status"])
def update_button_states(self):
"""更新按钮状态"""
has_selection = self.current_dut is not None
self.save_btn.setEnabled(has_selection)
self.delete_btn.setEnabled(has_selection)
def new_dut(self):
"""新建DUT"""
self.current_dut = None
self.name_input.clear()
self.desc_input.clear()
self.status_combo.setCurrentIndex(0)
self.update_button_states()
def edit_dut(self, dut_id):
"""编辑DUT"""
for dut in self.dut_data:
if dut["id"] == dut_id:
self.current_dut = dut
self.populate_form()
self.update_button_states()
break
def save_dut(self):
"""保存DUT"""
if not self.current_dut:
# 新建DUT
new_id = max([d["id"] for d in self.dut_data], default=0) + 1
self.current_dut = {
"id": new_id,
"name": self.name_input.text(),
"description": self.desc_input.text(),
"status": self.status_combo.currentText()
}
self.dut_data.append(self.current_dut)
else:
# 更新现有DUT
self.current_dut["name"] = self.name_input.text()
self.current_dut["description"] = self.desc_input.text()
self.current_dut["status"] = self.status_combo.currentText()
# 重新加载数据
self.load_data()
QMessageBox.information(self, "保存成功", "DUT信息已保存")
def delete_dut(self):
"""删除DUT"""
if self.current_dut:
reply = QMessageBox.question(self, "确认删除",
f"确定要删除DUT '{self.current_dut['name']}' 吗?",
QMessageBox.Yes | QMessageBox.No)
if reply == QMessageBox.Yes:
self.dut_data.remove(self.current_dut)
self.current_dut = None
self.load_data()
self.new_dut() # 清空表单
QMessageBox.information(self, "删除成功", "DUT已删除")