""" PCM Viewer - 现代化UI样式定义 主题:深色专业主题 """ # ==================== 颜色定义 ==================== class Colors: """颜色常量定义""" # 主背景色 BG_PRIMARY = "#1e1e2e" # 主背景 BG_SECONDARY = "#252537" # 次级背景(面板) BG_TERTIARY = "#313244" # 第三级背景(输入框、按钮) BG_HOVER = "#3a3a52" # 悬停背景 BG_PRESSED = "#45475a" # 按下背景 # 强调色 ACCENT = "#89b4fa" # 主强调色(蓝) ACCENT_HOVER = "#b4befe" # 强调色悬停 ACCENT_PRESSED = "#74c7ec" # 强调色按下 # 功能色 SUCCESS = "#a6e3a1" # 成功(绿) WARNING = "#f9e2af" # 警告(黄) ERROR = "#f38ba8" # 错误(红) INFO = "#89b4fa" # 信息(蓝) # 文字颜色 TEXT_PRIMARY = "#cdd6f4" # 主文字 TEXT_SECONDARY = "#a6adc8" # 次级文字 TEXT_MUTED = "#6c7086" # 弱化文字 TEXT_ON_ACCENT = "#1e1e2e" # 强调色上的文字 # 边框 BORDER = "#45475a" # 普通边框 BORDER_FOCUS = "#89b4fa" # 焦点边框 BORDER_SUBTLE = "#313244" # 细微边框 # ==================== 样式表 ==================== MAIN_STYLE = f""" /* ==================== 全局样式 ==================== */ QMainWindow {{ background-color: {Colors.BG_PRIMARY}; }} QWidget {{ color: {Colors.TEXT_PRIMARY}; font-family: "Microsoft YaHei", "Segoe UI", "PingFang SC", sans-serif; font-size: 13px; }} /* 特定容器背景 */ QMainWindow > QWidget {{ background-color: {Colors.BG_PRIMARY}; }} /* ==================== 按钮样式 ==================== */ QPushButton {{ background-color: {Colors.BG_TERTIARY}; color: {Colors.TEXT_PRIMARY}; border: 1px solid {Colors.BORDER}; border-radius: 6px; padding: 8px 16px; font-weight: 500; min-height: 20px; }} QPushButton:hover {{ background-color: {Colors.BG_HOVER}; border-color: {Colors.ACCENT}; }} QPushButton:pressed {{ background-color: {Colors.BG_PRESSED}; }} QPushButton:disabled {{ background-color: {Colors.BG_SECONDARY}; color: {Colors.TEXT_MUTED}; border-color: {Colors.BORDER_SUBTLE}; }} /* 主要操作按钮 */ QPushButton#primary {{ background-color: {Colors.ACCENT}; color: {Colors.TEXT_ON_ACCENT}; border: none; font-weight: 600; }} QPushButton#primary:hover {{ background-color: {Colors.ACCENT_HOVER}; }} QPushButton#primary:pressed {{ background-color: {Colors.ACCENT_PRESSED}; }} /* 危险操作按钮 */ QPushButton#danger {{ background-color: {Colors.ERROR}; color: {Colors.TEXT_ON_ACCENT}; border: none; }} QPushButton#danger:hover {{ background-color: #f5a0b3; }} /* ==================== 输入框样式 ==================== */ QLineEdit {{ background-color: {Colors.BG_TERTIARY}; color: {Colors.TEXT_PRIMARY}; border: 1px solid {Colors.BORDER}; border-radius: 6px; padding: 6px 10px; selection-background-color: {Colors.ACCENT}; }} QLineEdit:focus {{ border-color: {Colors.ACCENT}; }} QLineEdit:disabled {{ background-color: {Colors.BG_SECONDARY}; color: {Colors.TEXT_MUTED}; }} /* ==================== 数字输入框样式 ==================== */ QSpinBox {{ background-color: {Colors.BG_TERTIARY}; color: {Colors.TEXT_PRIMARY}; border: 1px solid {Colors.BORDER}; border-radius: 6px; padding-right: 20px; }} QSpinBox:focus {{ border-color: {Colors.ACCENT}; }} /* ==================== 标签样式 ==================== */ QLabel {{ color: {Colors.TEXT_PRIMARY}; background: transparent; }} QLabel#title {{ font-size: 16px; font-weight: 600; color: {Colors.TEXT_PRIMARY}; padding: 4px 0; }} QLabel#subtitle {{ font-size: 12px; color: {Colors.TEXT_SECONDARY}; }} /* ==================== 分组框样式 ==================== */ QGroupBox {{ background-color: {Colors.BG_SECONDARY}; border: 1px solid {Colors.BORDER}; border-radius: 8px; margin-top: 12px; padding-top: 12px; padding: 12px; font-weight: 500; }} QGroupBox::title {{ subcontrol-origin: margin; left: 12px; padding: 0 8px; color: {Colors.ACCENT}; }} /* ==================== 列表样式 ==================== */ QListWidget {{ background-color: {Colors.BG_TERTIARY}; color: {Colors.TEXT_PRIMARY}; border: 1px solid {Colors.BORDER}; border-radius: 6px; padding: 4px; outline: none; }} QListWidget::item {{ padding: 8px 12px; border-radius: 4px; margin: 2px 0; }} QListWidget::item:hover {{ background-color: {Colors.BG_HOVER}; }} QListWidget::item:selected {{ background-color: {Colors.ACCENT}; color: {Colors.TEXT_ON_ACCENT}; }} /* ==================== 复选框样式 ==================== */ QCheckBox {{ color: {Colors.TEXT_PRIMARY}; spacing: 8px; }} QCheckBox::indicator {{ width: 18px; height: 18px; border-radius: 4px; border: 2px solid {Colors.BORDER}; background-color: {Colors.BG_TERTIARY}; }} QCheckBox::indicator:hover {{ border-color: {Colors.ACCENT}; }} QCheckBox::indicator:checked {{ background-color: {Colors.ACCENT}; border-color: {Colors.ACCENT}; image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAgM0w0LjUgOC41TDIgNiIgc3Ryb2tlPSIjMWUxZTJlIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==); }} /* ==================== 滚动条样式 ==================== */ QScrollBar:vertical {{ background-color: {Colors.BG_SECONDARY}; width: 12px; border-radius: 6px; }} QScrollBar::handle:vertical {{ background-color: {Colors.BG_TERTIARY}; border-radius: 6px; min-height: 30px; }} QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {{ height: 0px; }} QScrollBar:horizontal {{ background-color: {Colors.BG_SECONDARY}; height: 12px; border-radius: 6px; }} QScrollBar::handle:horizontal {{ background-color: {Colors.BG_TERTIARY}; border-radius: 6px; min-width: 30px; }} QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {{ width: 0px; }} /* ==================== 分割器样式 ==================== */ QSplitter::handle {{ background-color: {Colors.BORDER}; }} QSplitter::handle:horizontal {{ width: 2px; }} QSplitter::handle:vertical {{ height: 2px; }} QSplitter::handle:hover {{ background-color: {Colors.ACCENT}; }} /* ==================== 对话框样式 ==================== */ QDialog {{ background-color: {Colors.BG_PRIMARY}; }} QDialogButtonBox QPushButton {{ min-width: 80px; }} /* ==================== 消息框样式 ==================== */ QMessageBox {{ background-color: {Colors.BG_PRIMARY}; }} QMessageBox QLabel {{ color: {Colors.TEXT_PRIMARY}; }} /* ==================== 文件对话框样式 ==================== */ QFileDialog {{ background-color: {Colors.BG_PRIMARY}; }} /* ==================== 颜色选择对话框样式 ==================== */ QColorDialog {{ background-color: {Colors.BG_PRIMARY}; }} /* ==================== 纯文本编辑框样式 ==================== */ QPlainTextEdit {{ background-color: {Colors.BG_TERTIARY}; color: {Colors.TEXT_PRIMARY}; border: 1px solid {Colors.BORDER}; border-radius: 6px; padding: 8px; font-family: "Consolas", "Monaco", "Courier New", monospace; selection-background-color: {Colors.ACCENT}; }} QPlainTextEdit:focus {{ border-color: {Colors.ACCENT}; }} /* ==================== 表单布局样式 ==================== */ QFormLayout QLabel {{ color: {Colors.TEXT_SECONDARY}; padding-right: 12px; }} /* ==================== 工具提示样式 ==================== */ QToolTip {{ background-color: {Colors.BG_SECONDARY}; color: {Colors.TEXT_PRIMARY}; border: 1px solid {Colors.BORDER}; border-radius: 4px; padding: 6px 10px; }} """ # ==================== 画布样式 ==================== CANVAS_STYLE = { 'background': Colors.BG_SECONDARY, 'grid_color': Colors.BORDER_SUBTLE, 'selection_border': Colors.ACCENT, 'selection_fill': f"{Colors.ACCENT}33", # 20%透明度 'canvas_border': Colors.BORDER, } # ==================== 组件默认样式 ==================== ITEM_STYLE = { 'default_border': Colors.BORDER, 'selected_border': Colors.ACCENT, 'hover_border': Colors.ACCENT_HOVER, 'resize_handle': Colors.ACCENT, 'resize_handle_size': 8, }