mirror of
https://github.com/HChaZZY/Any2MIF.git
synced 2025-12-06 10:33:49 +08:00
245 lines
6.9 KiB
Python
245 lines
6.9 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# Copyright (c) 2025 Any2MIF Project
|
|
# All rights reserved.
|
|
|
|
"""
|
|
Any2MIF - 主题控制器
|
|
负责应用程序的主题设置,锁定为深色模式
|
|
"""
|
|
|
|
import os
|
|
from PyQt6.QtWidgets import QWidget
|
|
from PyQt6.QtCore import QSettings, pyqtSignal
|
|
|
|
class ThemeController(QWidget):
|
|
"""主题控制器,锁定为深色模式"""
|
|
|
|
# 自定义信号
|
|
theme_changed = pyqtSignal(str) # 主题变更时发出的信号
|
|
|
|
def __init__(self, settings: QSettings, parent=None):
|
|
"""初始化主题控制器"""
|
|
super().__init__(parent)
|
|
self.settings = settings
|
|
|
|
# 直接设置为深色模式
|
|
self.settings.setValue("theme", "dark")
|
|
self.apply_theme("dark")
|
|
self.theme_changed.emit("dark")
|
|
|
|
def apply_theme(self, theme):
|
|
"""应用主题"""
|
|
# 加载样式表
|
|
style_file = os.path.join("resources", "styles", f"{theme}.qss")
|
|
|
|
if os.path.exists(style_file):
|
|
with open(style_file, "r", encoding="utf-8") as f:
|
|
style_sheet = f.read()
|
|
# 应用样式表到应用程序
|
|
app = self.window().parent()
|
|
if app:
|
|
app.setStyleSheet(style_sheet)
|
|
else:
|
|
# 如果样式文件不存在,使用默认样式
|
|
self._apply_default_style(theme)
|
|
|
|
def _apply_default_style(self, theme):
|
|
"""应用默认样式"""
|
|
if theme == "light":
|
|
style_sheet = """
|
|
QMainWindow, QDialog {
|
|
background-color: #f5f5f5;
|
|
color: #333333;
|
|
}
|
|
|
|
QWidget {
|
|
background-color: #f5f5f5;
|
|
color: #333333;
|
|
}
|
|
|
|
QLabel {
|
|
color: #333333;
|
|
}
|
|
|
|
QPushButton {
|
|
background-color: #e0e0e0;
|
|
border: 1px solid #b0b0b0;
|
|
border-radius: 4px;
|
|
padding: 5px 10px;
|
|
color: #333333;
|
|
}
|
|
|
|
QPushButton:hover {
|
|
background-color: #d0d0d0;
|
|
}
|
|
|
|
QPushButton:pressed {
|
|
background-color: #c0c0c0;
|
|
}
|
|
|
|
QLineEdit, QSpinBox, QComboBox {
|
|
background-color: #ffffff;
|
|
border: 1px solid #b0b0b0;
|
|
border-radius: 4px;
|
|
padding: 3px;
|
|
color: #333333;
|
|
}
|
|
|
|
QGroupBox {
|
|
border: 1px solid #b0b0b0;
|
|
border-radius: 4px;
|
|
margin-top: 10px;
|
|
padding-top: 10px;
|
|
}
|
|
|
|
QGroupBox::title {
|
|
subcontrol-origin: margin;
|
|
subcontrol-position: top center;
|
|
padding: 0 5px;
|
|
color: #333333;
|
|
}
|
|
|
|
QListWidget {
|
|
background-color: #ffffff;
|
|
border: 1px solid #b0b0b0;
|
|
border-radius: 4px;
|
|
color: #333333;
|
|
}
|
|
|
|
QListWidget::item:selected {
|
|
background-color: #b0b0b0;
|
|
color: #333333;
|
|
}
|
|
|
|
QSlider::groove:horizontal {
|
|
border: 1px solid #b0b0b0;
|
|
height: 8px;
|
|
background: #ffffff;
|
|
margin: 2px 0;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
QSlider::handle:horizontal {
|
|
background: #e0e0e0;
|
|
border: 1px solid #b0b0b0;
|
|
width: 18px;
|
|
margin: -2px 0;
|
|
border-radius: 9px;
|
|
}
|
|
|
|
QSlider::handle:horizontal:hover {
|
|
background: #d0d0d0;
|
|
}
|
|
|
|
QStatusBar {
|
|
background-color: #e0e0e0;
|
|
color: #333333;
|
|
}
|
|
|
|
QToolBar {
|
|
background-color: #e0e0e0;
|
|
border-bottom: 1px solid #b0b0b0;
|
|
}
|
|
"""
|
|
else: # dark
|
|
style_sheet = """
|
|
QMainWindow, QDialog {
|
|
background-color: #2d2d2d;
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QWidget {
|
|
background-color: #2d2d2d;
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QLabel {
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QPushButton {
|
|
background-color: #3d3d3d;
|
|
border: 1px solid #5d5d5d;
|
|
border-radius: 4px;
|
|
padding: 5px 10px;
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QPushButton:hover {
|
|
background-color: #4d4d4d;
|
|
}
|
|
|
|
QPushButton:pressed {
|
|
background-color: #5d5d5d;
|
|
}
|
|
|
|
QLineEdit, QSpinBox, QComboBox {
|
|
background-color: #3d3d3d;
|
|
border: 1px solid #5d5d5d;
|
|
border-radius: 4px;
|
|
padding: 3px;
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QGroupBox {
|
|
border: 1px solid #5d5d5d;
|
|
border-radius: 4px;
|
|
margin-top: 10px;
|
|
padding-top: 10px;
|
|
}
|
|
|
|
QGroupBox::title {
|
|
subcontrol-origin: margin;
|
|
subcontrol-position: top center;
|
|
padding: 0 5px;
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QListWidget {
|
|
background-color: #3d3d3d;
|
|
border: 1px solid #5d5d5d;
|
|
border-radius: 4px;
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QListWidget::item:selected {
|
|
background-color: #5d5d5d;
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QSlider::groove:horizontal {
|
|
border: 1px solid #5d5d5d;
|
|
height: 8px;
|
|
background: #3d3d3d;
|
|
margin: 2px 0;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
QSlider::handle:horizontal {
|
|
background: #5d5d5d;
|
|
border: 1px solid #7d7d7d;
|
|
width: 18px;
|
|
margin: -2px 0;
|
|
border-radius: 9px;
|
|
}
|
|
|
|
QSlider::handle:horizontal:hover {
|
|
background: #6d6d6d;
|
|
}
|
|
|
|
QStatusBar {
|
|
background-color: #3d3d3d;
|
|
color: #f0f0f0;
|
|
}
|
|
|
|
QToolBar {
|
|
background-color: #3d3d3d;
|
|
border-bottom: 1px solid #5d5d5d;
|
|
}
|
|
"""
|
|
|
|
# 应用样式表到应用程序
|
|
app = self.window().parent()
|
|
if app:
|
|
app.setStyleSheet(style_sheet) |