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

220 lines
7.9 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 -*-
"""
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已删除")