这是使用PyQT5作为UI的首次提交,将后端和UI合并到1个工程中,统一使用了Python,没有使用JS和HTML
This commit is contained in:
219
UI/reserved/dut_management_view.py
Normal file
219
UI/reserved/dut_management_view.py
Normal file
@@ -0,0 +1,219 @@
|
||||
#!/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已删除")
|
||||
Reference in New Issue
Block a user