from PyQt5.QtWidgets import QDialog, QVBoxLayout, QHBoxLayout, QLabel, QComboBox, QPushButton from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont class SwitchVarModelDialog(QDialog): """变量值类型选择对话框""" def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle('选择变量值类型') self.setFixedSize(380, 300) # 增加高度避免遮挡,并保持与用户最新修改一致 self.setModal(True) self.selectedType = None # 设置窗口样式 self.setWindowFlags(Qt.Dialog | Qt.WindowCloseButtonHint) # 应用样式 self.setStyleSheet(self.getStyleSheet()) self.setupUI() def setupUI(self): """设置界面""" # 创建主布局 mainLayout = QVBoxLayout() mainLayout.setSpacing(20) mainLayout.setContentsMargins(30, 30, 30, 30) # 标题标签 titleLabel = QLabel('选择变量值类型') titleLabel.setObjectName('titleLabel') # 用于样式表 mainLayout.addWidget(titleLabel) # 说明标签 infoLabel = QLabel('请选择您要将变量切换到的值类型:') infoLabel.setObjectName('infoLabel') # 用于样式表 mainLayout.addWidget(infoLabel) # 创建combobox self.comboBox = QComboBox() self.comboBox.setObjectName('valueTypeComboBox') # 用于样式表 self.comboBox.addItems(['本地值', '远程值', '模拟值']) self.comboBox.setCurrentText('本地值') # 默认选择本地值 mainLayout.addWidget(self.comboBox) # 添加更多弹性空间,确保按钮不会遮挡下拉框 mainLayout.addStretch(2) # 创建按钮布局 buttonLayout = QHBoxLayout() buttonLayout.setSpacing(15) # 确定按钮 okButton = QPushButton('确定') okButton.setObjectName('okButton') # 用于样式表 okButton.clicked.connect(self.accept) buttonLayout.addWidget(okButton) # 取消按钮 cancelButton = QPushButton('取消') cancelButton.setObjectName('cancelButton') # 用于样式表 cancelButton.clicked.connect(self.reject) buttonLayout.addWidget(cancelButton) mainLayout.addLayout(buttonLayout) self.setLayout(mainLayout) def getSelectedType(self): """获取选择的类型""" return self.comboBox.currentText() def getStyleSheet(self): """返回对话框的样式表""" return """ QDialog { background-color: #F8F9FA; border-radius: 12px; border: 1px solid #E5E7EB; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } QLabel#titleLabel { font-size: 18px; font-weight: 600; color: #1F2937; margin-bottom: 10px; } QLabel#infoLabel { font-size: 14px; color: #6B7280; margin-bottom: 15px; } QComboBox#valueTypeComboBox { border: 1px solid #D1D5DB; border-radius: 8px; padding: 8px 12px; font-size: 14px; color: #374151; background-color: #FFFFFF; min-height: 36px; } QComboBox#valueTypeComboBox:hover { border-color: #9CA3AF; } QComboBox#valueTypeComboBox:focus { border-color: #2277EF; outline: none; } QComboBox#valueTypeComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; width: 25px; border-left-width: 1px; border-left-color: #D1D5DB; border-left-style: solid; border-top-right-radius: 8px; border-bottom-right-radius: 8px; } QComboBox#valueTypeComboBox::down-arrow { image: url(./Static/down_arrow.png); /* 假设有一个向下箭头图标 */ width: 16px; height: 16px; } QComboBox#valueTypeComboBox QAbstractItemView { border: 1px solid #E5E7EB; border-radius: 8px; background-color: #FFFFFF; selection-background-color: #EBF8FF; selection-color: #1D4ED8; outline: none; padding: 5px; } QComboBox#valueTypeComboBox QAbstractItemView::item { min-height: 32px; padding: 5px 10px; border-radius: 6px; } QComboBox#valueTypeComboBox QAbstractItemView::item:hover { background-color: #F3F4F6; } /* 使用项目之前的按钮样式 */ QPushButton { border: none; outline: none; font-family: "PingFangSC-Medium", "Microsoft YaHei", sans-serif; font-size: 14px; font-weight: 600; padding: 8px 16px; border-radius: 6px; min-width: 80px; min-height: 32px; } /* 确定按钮样式 - 使用项目蓝色主题 */ QPushButton#okButton { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #2277EF, stop:1 #1976D2); color: #FFFFFF; border: 1px solid #1976D2; } QPushButton#okButton:hover { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #3B82F6, stop:1 #2277EF); border-color: #2277EF; } QPushButton#okButton:pressed { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1976D2, stop:1 #1565C0); border-color: #1565C0; } /* 取消按钮样式 - 使用项目灰色主题 */ QPushButton#cancelButton { background-color: #F9FAFB; color: #6B7280; border: 1px solid #E5E7EB; } QPushButton#cancelButton:hover { background-color: #F3F4F6; border-color: #D1D5DB; color: #4B5563; } QPushButton#cancelButton:pressed { background-color: #E5E7EB; border-color: #9CA3AF; color: #374151; } """