jiateng_ws/ui/inspection_settings_ui.py

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)