203 lines
7.5 KiB
Python
203 lines
7.5 KiB
Python
|
|
from PySide6.QtWidgets import (
|
||
|
|
QWidget, QVBoxLayout, QHBoxLayout, QFormLayout, QLabel,
|
||
|
|
QLineEdit, QCheckBox, QComboBox, QPushButton, QGroupBox,
|
||
|
|
QTableWidget, QTableWidgetItem, QHeaderView, QAbstractItemView,
|
||
|
|
QSpinBox, QDoubleSpinBox, QFrame, QScrollArea
|
||
|
|
)
|
||
|
|
from PySide6.QtGui import QFont, QBrush, QColor
|
||
|
|
from PySide6.QtCore import Qt, Signal
|
||
|
|
|
||
|
|
class InspectionSettingsUI(QWidget):
|
||
|
|
"""检验设置UI"""
|
||
|
|
|
||
|
|
def __init__(self, parent=None):
|
||
|
|
super().__init__(parent)
|
||
|
|
self.parent = parent
|
||
|
|
self.init_ui()
|
||
|
|
|
||
|
|
def init_ui(self):
|
||
|
|
"""初始化UI"""
|
||
|
|
# 设置字体
|
||
|
|
self.title_font = QFont("微软雅黑", 14, QFont.Bold)
|
||
|
|
self.normal_font = QFont("微软雅黑", 11)
|
||
|
|
self.small_font = QFont("微软雅黑", 9)
|
||
|
|
|
||
|
|
# 设置背景颜色,便于识别
|
||
|
|
self.setStyleSheet("background-color: #f5f5f5;")
|
||
|
|
|
||
|
|
# 创建主布局
|
||
|
|
self.main_layout = QVBoxLayout(self)
|
||
|
|
self.main_layout.setContentsMargins(20, 20, 20, 20)
|
||
|
|
self.main_layout.setSpacing(15)
|
||
|
|
|
||
|
|
# 创建滚动区域
|
||
|
|
self.scroll_area = QScrollArea()
|
||
|
|
self.scroll_area.setWidgetResizable(True)
|
||
|
|
self.scroll_area.setFrameShape(QFrame.NoFrame)
|
||
|
|
|
||
|
|
# 创建滚动区域的内容部件
|
||
|
|
self.scroll_widget = QWidget()
|
||
|
|
self.scroll_layout = QVBoxLayout(self.scroll_widget)
|
||
|
|
self.scroll_layout.setContentsMargins(0, 0, 0, 0)
|
||
|
|
self.scroll_layout.setSpacing(15)
|
||
|
|
|
||
|
|
# 创建6个检验项目配置组
|
||
|
|
self.config_groups = []
|
||
|
|
for i in range(6):
|
||
|
|
group = self.create_config_group(i + 1)
|
||
|
|
self.scroll_layout.addWidget(group)
|
||
|
|
self.config_groups.append(group)
|
||
|
|
|
||
|
|
# 设置滚动区域的部件
|
||
|
|
self.scroll_area.setWidget(self.scroll_widget)
|
||
|
|
self.main_layout.addWidget(self.scroll_area, 1)
|
||
|
|
|
||
|
|
# 底部按钮区域
|
||
|
|
self.button_layout = QHBoxLayout()
|
||
|
|
self.button_layout.setContentsMargins(0, 10, 0, 0)
|
||
|
|
|
||
|
|
self.save_button = QPushButton("保存配置")
|
||
|
|
self.save_button.setFont(self.normal_font)
|
||
|
|
self.save_button.setFixedSize(120, 40)
|
||
|
|
self.save_button.setStyleSheet("""
|
||
|
|
QPushButton {
|
||
|
|
background-color: #4caf50;
|
||
|
|
color: white;
|
||
|
|
border: none;
|
||
|
|
border-radius: 5px;
|
||
|
|
}
|
||
|
|
QPushButton:hover {
|
||
|
|
background-color: #45a049;
|
||
|
|
}
|
||
|
|
QPushButton:pressed {
|
||
|
|
background-color: #3d8b40;
|
||
|
|
}
|
||
|
|
""")
|
||
|
|
|
||
|
|
self.reset_button = QPushButton("重置")
|
||
|
|
self.reset_button.setFont(self.normal_font)
|
||
|
|
self.reset_button.setFixedSize(120, 40)
|
||
|
|
self.reset_button.setStyleSheet("""
|
||
|
|
QPushButton {
|
||
|
|
background-color: #f44336;
|
||
|
|
color: white;
|
||
|
|
border: none;
|
||
|
|
border-radius: 5px;
|
||
|
|
}
|
||
|
|
QPushButton:hover {
|
||
|
|
background-color: #e53935;
|
||
|
|
}
|
||
|
|
QPushButton:pressed {
|
||
|
|
background-color: #d32f2f;
|
||
|
|
}
|
||
|
|
""")
|
||
|
|
|
||
|
|
self.button_layout.addStretch()
|
||
|
|
self.button_layout.addWidget(self.reset_button)
|
||
|
|
self.button_layout.addSpacing(20)
|
||
|
|
self.button_layout.addWidget(self.save_button)
|
||
|
|
|
||
|
|
self.main_layout.addLayout(self.button_layout)
|
||
|
|
|
||
|
|
def create_config_group(self, position):
|
||
|
|
"""创建检验项目配置组
|
||
|
|
|
||
|
|
Args:
|
||
|
|
position: 位置序号 (1-6)
|
||
|
|
|
||
|
|
Returns:
|
||
|
|
QGroupBox: 配置组
|
||
|
|
"""
|
||
|
|
group = QGroupBox(f"检验项目 {position}")
|
||
|
|
group.setFont(self.normal_font)
|
||
|
|
group.setCheckable(True)
|
||
|
|
group.setChecked(position <= 3) # 默认前3个启用
|
||
|
|
|
||
|
|
group_layout = QFormLayout(group)
|
||
|
|
group_layout.setContentsMargins(15, 25, 15, 15)
|
||
|
|
group_layout.setSpacing(10)
|
||
|
|
|
||
|
|
# 名称
|
||
|
|
name_label = QLabel("项目名称:")
|
||
|
|
name_label.setFont(self.normal_font)
|
||
|
|
name_input = QLineEdit()
|
||
|
|
name_input.setFont(self.normal_font)
|
||
|
|
name_input.setObjectName(f"name_input_{position}")
|
||
|
|
group_layout.addRow(name_label, name_input)
|
||
|
|
|
||
|
|
# 显示名称
|
||
|
|
display_name_label = QLabel("显示名称:")
|
||
|
|
display_name_label.setFont(self.normal_font)
|
||
|
|
display_name_input = QLineEdit()
|
||
|
|
display_name_input.setFont(self.normal_font)
|
||
|
|
display_name_input.setObjectName(f"display_name_input_{position}")
|
||
|
|
group_layout.addRow(display_name_label, display_name_input)
|
||
|
|
|
||
|
|
# 数据类型
|
||
|
|
data_type_label = QLabel("数据类型:")
|
||
|
|
data_type_label.setFont(self.normal_font)
|
||
|
|
data_type_combo = QComboBox()
|
||
|
|
data_type_combo.setFont(self.normal_font)
|
||
|
|
data_type_combo.setObjectName(f"data_type_combo_{position}")
|
||
|
|
data_type_combo.addItem("文本", "text")
|
||
|
|
data_type_combo.addItem("数值", "number")
|
||
|
|
data_type_combo.addItem("枚举", "enum")
|
||
|
|
group_layout.addRow(data_type_label, data_type_combo)
|
||
|
|
|
||
|
|
# 单位 (用于数值类型)
|
||
|
|
unit_label = QLabel("单位:")
|
||
|
|
unit_label.setFont(self.normal_font)
|
||
|
|
unit_input = QLineEdit()
|
||
|
|
unit_input.setFont(self.normal_font)
|
||
|
|
unit_input.setObjectName(f"unit_input_{position}")
|
||
|
|
group_layout.addRow(unit_label, unit_input)
|
||
|
|
|
||
|
|
# 最小值 (用于数值类型)
|
||
|
|
min_value_label = QLabel("最小值:")
|
||
|
|
min_value_label.setFont(self.normal_font)
|
||
|
|
min_value_spin = QDoubleSpinBox()
|
||
|
|
min_value_spin.setFont(self.normal_font)
|
||
|
|
min_value_spin.setObjectName(f"min_value_spin_{position}")
|
||
|
|
min_value_spin.setRange(-999999, 999999)
|
||
|
|
min_value_spin.setDecimals(2)
|
||
|
|
min_value_spin.setSingleStep(0.1)
|
||
|
|
group_layout.addRow(min_value_label, min_value_spin)
|
||
|
|
|
||
|
|
# 最大值 (用于数值类型)
|
||
|
|
max_value_label = QLabel("最大值:")
|
||
|
|
max_value_label.setFont(self.normal_font)
|
||
|
|
max_value_spin = QDoubleSpinBox()
|
||
|
|
max_value_spin.setFont(self.normal_font)
|
||
|
|
max_value_spin.setObjectName(f"max_value_spin_{position}")
|
||
|
|
max_value_spin.setRange(-999999, 999999)
|
||
|
|
max_value_spin.setDecimals(2)
|
||
|
|
max_value_spin.setSingleStep(0.1)
|
||
|
|
max_value_spin.setValue(100)
|
||
|
|
group_layout.addRow(max_value_label, max_value_spin)
|
||
|
|
|
||
|
|
# 枚举值 (用于枚举类型)
|
||
|
|
enum_values_label = QLabel("枚举值:")
|
||
|
|
enum_values_label.setFont(self.normal_font)
|
||
|
|
enum_values_input = QLineEdit()
|
||
|
|
enum_values_input.setFont(self.normal_font)
|
||
|
|
enum_values_input.setObjectName(f"enum_values_input_{position}")
|
||
|
|
enum_values_input.setPlaceholderText("用逗号分隔,如: 合格,不合格,需重检")
|
||
|
|
group_layout.addRow(enum_values_label, enum_values_input)
|
||
|
|
|
||
|
|
# 是否必填
|
||
|
|
required_check = QCheckBox("必填项")
|
||
|
|
required_check.setFont(self.normal_font)
|
||
|
|
required_check.setObjectName(f"required_check_{position}")
|
||
|
|
group_layout.addRow("", required_check)
|
||
|
|
|
||
|
|
# 保存位置信息
|
||
|
|
group.setProperty("position", position)
|
||
|
|
|
||
|
|
return group
|
||
|
|
|
||
|
|
def set_form_enabled(self, enabled):
|
||
|
|
"""设置表单是否可编辑"""
|
||
|
|
for group in self.config_groups:
|
||
|
|
group.setEnabled(enabled)
|
||
|
|
self.save_button.setEnabled(enabled)
|
||
|
|
self.reset_button.setEnabled(enabled)
|