From 75dbeb24e99409aa5c3c4bfa9a49581218ee868c Mon Sep 17 00:00:00 2001
From: Maziang <929110464@qq.com>
Date: Sun, 23 Nov 2025 00:41:30 +0800
Subject: [PATCH] Enhance calendar widget and theme manager with optimized
Apple design styles
- Updated the `CalendarFloatingWidget` and `CalendarWidget` classes to improve dark and light theme styles, aligning with an optimized Apple design aesthetic.
- Adjusted font sizes, button styles, and color schemes for better visual consistency and usability.
- Enhanced the `ThemeManager` to provide refined styles for various UI components, including menus, buttons, and toolbars.
- Implemented responsive styles for button states (hover, pressed) and improved accessibility with disabled text colors.
- Ensured that theme changes propagate correctly across the application, particularly in the `WordStyleMainWindow`.
---
src/deepseek_dialog_window.py | 298 +++++++++++++------------
src/ui/calendar_floating_widget.py | 76 ++++---
src/ui/calendar_widget.py | 343 +++++++++++++++++++----------
src/ui/theme_manager.py | 150 +++++++------
src/word_main_window.py | 2 +-
5 files changed, 511 insertions(+), 358 deletions(-)
diff --git a/src/deepseek_dialog_window.py b/src/deepseek_dialog_window.py
index 22cf9f1..6b6e4d0 100644
--- a/src/deepseek_dialog_window.py
+++ b/src/deepseek_dialog_window.py
@@ -187,134 +187,109 @@ class DeepSeekDialogWindow(QDialog):
self.streaming_finished.connect(self.on_streaming_finished)
def toggle_theme(self):
- """切换黑白主题"""
- if hasattr(self, 'current_theme') and self.current_theme == "dark":
- self.apply_theme("light")
- else:
- self.apply_theme("dark")
+ """切换黑白主题 - 使用主题管理器"""
+ try:
+ from .ui.theme_manager import theme_manager
+ except ImportError:
+ # 处理直接运行的情况
+ from ui.theme_manager import theme_manager
+
+ current_is_dark = theme_manager.is_dark_theme()
+ theme_manager.set_dark_theme(not current_is_dark)
+
+ # 更新对话显示
+ self.rebuild_conversation_display()
- def apply_theme(self, theme):
- """应用主题样式"""
- self.current_theme = theme
-
- if theme == "dark":
- # 深色主题样式
- self.setStyleSheet("""
- QDialog {
- background-color: #1e1e1e;
- color: #ffffff;
- }
- QLabel {
- color: #ffffff;
- }
- QTextEdit {
- background-color: #2d2d2d;
- color: #ffffff;
- border: 1px solid #444;
- border-radius: 4px;
- padding: 10px;
- font-family: 'Microsoft YaHei', sans-serif;
- font-size: 12px;
- }
- QLineEdit {
- background-color: #2d2d2d;
- color: #ffffff;
- border: 1px solid #444;
- border-radius: 4px;
- padding: 8px;
- font-size: 12px;
- }
- QPushButton {
- background-color: #0078d7;
- color: white;
- border: none;
- border-radius: 4px;
- padding: 8px 16px;
- font-size: 12px;
- }
- QPushButton:hover {
- background-color: #106ebe;
- }
- QPushButton:pressed {
- background-color: #005a9e;
- }
- QScrollArea {
- background-color: #1e1e1e;
- border: none;
- }
- QScrollBar:vertical {
- background-color: #2d2d2d;
- width: 15px;
- margin: 0px;
- }
- QScrollBar::handle:vertical {
- background-color: #555;
- border-radius: 7px;
- min-height: 20px;
- }
- QScrollBar::handle:vertical:hover {
- background-color: #666;
- }
- """)
- else:
- # 浅色主题样式
- self.setStyleSheet("""
- QDialog {
- background-color: #ffffff;
- color: #000000;
- }
- QLabel {
- color: #000000;
- }
- QTextEdit {
- background-color: #ffffff;
- color: #000000;
- border: 1px solid #ddd;
- border-radius: 4px;
- padding: 10px;
- font-family: 'Microsoft YaHei', sans-serif;
- font-size: 12px;
- }
- QLineEdit {
- background-color: #ffffff;
- color: #000000;
- border: 1px solid #ddd;
- border-radius: 4px;
- padding: 8px;
- font-size: 12px;
- }
- QPushButton {
- background-color: #0078d7;
- color: white;
- border: none;
- border-radius: 4px;
- padding: 8px 16px;
- font-size: 12px;
- }
- QPushButton:hover {
- background-color: #106ebe;
- }
- QPushButton:pressed {
- background-color: #005a9e;
- }
- QScrollArea {
- background-color: #ffffff;
- border: none;
- }
- QScrollBar:vertical {
- background-color: #f0f0f0;
- width: 15px;
- margin: 0px;
- }
- QScrollBar::handle:vertical {
- background-color: #c0c0c0;
- border-radius: 7px;
- min-height: 20px;
- }
- QScrollBar::handle:vertical:hover {
- background-color: #a0a0a0;
- }
- """)
+ def apply_theme(self, is_dark=None):
+ """应用主题样式 - 与主题管理器同步"""
+ try:
+ from .ui.theme_manager import theme_manager
+ except ImportError:
+ # 处理直接运行的情况
+ from ui.theme_manager import theme_manager
+
+ if is_dark is None:
+ is_dark = theme_manager.is_dark_theme()
+
+ # 获取主题管理器的样式表
+ base_stylesheet = theme_manager.get_theme_stylesheet(is_dark)
+
+ # 添加对话框特定的样式优化
+ dialog_stylesheet = base_stylesheet + f"""
+ /* DeepSeek对话框特定样式 */
+ QDialog {{
+ background-color: {'#1c1c1e' if is_dark else '#ffffff'};
+ }}
+
+ /* 对话区域优化 */
+ QTextEdit#conversation_text {{
+ background-color: {'#121212' if is_dark else '#ffffff'};
+ border: 1px solid {'#3a3a3c' if is_dark else '#e0e0e0'};
+ border-radius: 8px;
+ padding: 16px;
+ font-family: '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica Neue', 'Helvetica', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', sans-serif;
+ font-size: 14px;
+ line-height: 1.6;
+ color: {'#e8e8ed' if is_dark else '#333333'};
+ }}
+
+ /* 输入框优化 */
+ QTextEdit#input_edit {{
+ background-color: {'#2c2c2e' if is_dark else '#f8f8f8'};
+ border: 1px solid {'#3a3a3c' if is_dark else '#e0e0e0'};
+ border-radius: 8px;
+ padding: 12px;
+ font-family: '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica Neue', 'Helvetica', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', sans-serif;
+ font-size: 14px;
+ color: {'#e8e8ed' if is_dark else '#333333'};
+ }}
+
+ QTextEdit#input_edit:focus {{
+ border: 2px solid {'#0a84ff' if is_dark else '#0078d7'};
+ }}
+
+ /* 按钮优化 */
+ QPushButton {{
+ border-radius: 8px;
+ padding: 8px 16px;
+ font-weight: 500;
+ min-width: 80px;
+ }}
+
+ QPushButton:default {{
+ background-color: #0a84ff;
+ color: #ffffff;
+ }}
+
+ /* 滚动区域优化 */
+ QScrollArea {{
+ border: none;
+ background-color: transparent;
+ }}
+
+ /* 消息气泡样式 */
+ .user-message {{
+ background-color: {'#0a84ff' if is_dark else '#0078d7'};
+ color: #ffffff;
+ border-radius: 12px;
+ padding: 12px 16px;
+ margin: 4px 0;
+ max-width: 80%;
+ align-self: flex-end;
+ }}
+
+ .ai-message {{
+ background-color: {'#3a3a3c' if is_dark else '#f0f0f0'};
+ color: {'#e8e8ed' if is_dark else '#333333'};
+ border-radius: 12px;
+ padding: 12px 16px;
+ margin: 4px 0;
+ max-width: 80%;
+ align-self: flex-start;
+ }}
+ """
+
+ self.setStyleSheet(dialog_stylesheet)
def create_conversation_area(self, parent):
"""创建对话显示区域"""
@@ -413,7 +388,6 @@ class DeepSeekDialogWindow(QDialog):
self.add_streaming_message_start()
# 在新线程中执行流式请求
- import threading
self.streaming_thread = threading.Thread(target=self.call_deepseek_api_stream, args=(message,))
self.streaming_thread.daemon = True
self.streaming_thread.start()
@@ -455,7 +429,14 @@ class DeepSeekDialogWindow(QDialog):
self.conversation_text.ensureCursorVisible()
def rebuild_conversation_display(self):
- """重新构建对话显示"""
+ """重新构建对话显示 - 优化主题适配"""
+ try:
+ from .ui.theme_manager import theme_manager
+ except ImportError:
+ # 处理直接运行的情况
+ from ui.theme_manager import theme_manager
+
+ is_dark = theme_manager.is_dark_theme()
html_content = ""
for msg in self.conversation_history:
@@ -463,29 +444,66 @@ class DeepSeekDialogWindow(QDialog):
message = msg["message"]
is_streaming = msg.get("streaming", False)
- # 根据发送者设置不同的样式
+ # 根据发送者和主题设置不同的样式 - 优化颜色对比度
if sender == "用户":
- bg_color = "#e3f2fd" if self.current_theme == "light" else "#2d3e50"
- text_color = "#000" if self.current_theme == "light" else "#fff"
+ bg_color = "#0a84ff" # 统一的用户消息颜色
+ text_color = "#ffffff"
+ align_style = "margin-left: auto; margin-right: 0;"
elif sender == "AI助手":
- bg_color = "#f5f5f5" if self.current_theme == "light" else "#3d3d3d"
- text_color = "#000" if self.current_theme == "light" else "#fff"
+ bg_color = "#3a3a3c" if is_dark else "#f0f0f0"
+ text_color = "#e8e8ed" if is_dark else "#333333"
+ align_style = "margin-left: 0; margin-right: auto;"
else: # 系统消息
- bg_color = "#fff3cd" if self.current_theme == "light" else "#5d4e00"
- text_color = "#856404" if self.current_theme == "light" else "#ffd700"
+ bg_color = "#5d4e00" if is_dark else "#fff3cd"
+ text_color = "#ffd700" if is_dark else "#856404"
+ align_style = "margin: 0 auto;"
# 格式化消息内容
formatted_message = message.replace('\n', '
') if message else "正在思考..."
+ # 优化消息气泡样式
html_content += f'''
-
-
{sender}:
- {formatted_message}
+
+
{sender}:
+
{formatted_message}
'''
+ # 添加现代滚动条样式
+ scrollbar_style = f"""
+
+ """
+
# 设置HTML内容
- self.conversation_text.setHtml(html_content)
+ self.conversation_text.setHtml(scrollbar_style + html_content)
def call_deepseek_api_stream(self, message):
"""调用DeepSeek API(流式版本)"""
diff --git a/src/ui/calendar_floating_widget.py b/src/ui/calendar_floating_widget.py
index f8ee8ca..90f0cde 100644
--- a/src/ui/calendar_floating_widget.py
+++ b/src/ui/calendar_floating_widget.py
@@ -133,12 +133,12 @@ class CalendarFloatingWidget(QWidget):
self.apply_theme()
def apply_theme(self):
- """应用主题样式"""
+ """应用主题样式 - 优化Apple设计风格"""
is_dark = theme_manager.is_dark_theme()
colors = theme_manager.get_current_theme_colors()
if is_dark:
- # 深色主题样式
+ # 深色主题样式 - 优化版Apple设计风格
self.main_frame.setStyleSheet(f"""
QFrame#mainFrame {{
background-color: {colors['surface']};
@@ -153,7 +153,7 @@ class CalendarFloatingWidget(QWidget):
}}
QLabel#dateLabel {{
color: {colors['text_secondary']};
- font-size: 11px;
+ font-size: 12px;
padding: 4px 6px;
margin: 2px;
}}
@@ -174,40 +174,49 @@ class CalendarFloatingWidget(QWidget):
color: white;
border-radius: 6px;
}}
+ QPushButton#closeButton:pressed {{
+ background-color: #c50e1f;
+ }}
QPushButton#todayButton, QPushButton#clearButton, QPushButton#insertButton {{
background-color: {colors['accent']};
color: white;
border: none;
border-radius: 6px;
padding: 6px 16px;
- font-size: 11px;
+ font-size: 12px;
font-weight: 500;
}}
QPushButton#todayButton:hover, QPushButton#clearButton:hover, QPushButton#insertButton:hover {{
background-color: {colors['accent_hover']};
}}
+ QPushButton#todayButton:pressed, QPushButton#clearButton:pressed, QPushButton#insertButton:pressed {{
+ background-color: {colors['accent_pressed']};
+ }}
""")
- # 更新日历控件样式
+ # 更新日历控件样式 - 深色主题优化版Apple设计风格
self.calendar.setStyleSheet(f"""
QCalendarWidget {{
background-color: {colors['surface']};
border: 1px solid {colors['border']};
- border-radius: 4px;
+ border-radius: 8px;
}}
QCalendarWidget QToolButton {{
- height: 30px;
- width: 80px;
+ height: 32px;
+ width: 85px;
color: {colors['text']};
- font-size: 12px;
- font-weight: bold;
+ font-size: 13px;
+ font-weight: 500;
background-color: {colors['surface']};
border: 1px solid {colors['border']};
- border-radius: 4px;
+ border-radius: 6px;
}}
QCalendarWidget QToolButton:hover {{
background-color: {colors['surface_hover']};
}}
+ QCalendarWidget QToolButton:pressed {{
+ background-color: {colors['surface_pressed']};
+ }}
QCalendarWidget QMenu {{
width: 150px;
left: 20px;
@@ -215,15 +224,16 @@ class CalendarFloatingWidget(QWidget):
font-size: 12px;
background-color: {colors['surface']};
border: 1px solid {colors['border']};
+ border-radius: 6px;
}}
QCalendarWidget QSpinBox {{
- width: 80px;
+ width: 85px;
font-size: 12px;
background-color: {colors['surface']};
selection-background-color: {colors['accent']};
selection-color: white;
border: 1px solid {colors['border']};
- border-radius: 4px;
+ border-radius: 6px;
color: {colors['text']};
}}
QCalendarWidget QSpinBox::up-button {{
@@ -254,12 +264,15 @@ class CalendarFloatingWidget(QWidget):
background-color: {colors['surface']};
color: {colors['text']};
}}
+ QCalendarWidget QAbstractItemView:disabled {{
+ color: {colors['text_disabled']};
+ }}
QCalendarWidget QWidget#qt_calendar_navigationbar {{
background-color: {colors['surface']};
}}
""")
else:
- # 浅色主题样式
+ # 浅色主题样式 - 优化版Apple设计风格
self.main_frame.setStyleSheet(f"""
QFrame#mainFrame {{
background-color: {colors['surface']};
@@ -275,7 +288,7 @@ class CalendarFloatingWidget(QWidget):
}}
QLabel#dateLabel {{
color: {colors['text_secondary']};
- font-size: 11px;
+ font-size: 12px;
padding: 4px 6px;
margin: 2px;
}}
@@ -296,40 +309,49 @@ class CalendarFloatingWidget(QWidget):
color: white;
border-radius: 6px;
}}
+ QPushButton#closeButton:pressed {{
+ background-color: #c50e1f;
+ }}
QPushButton#todayButton, QPushButton#clearButton, QPushButton#insertButton {{
background-color: {colors['accent']};
color: white;
border: none;
border-radius: 6px;
padding: 6px 16px;
- font-size: 11px;
+ font-size: 12px;
font-weight: 500;
}}
QPushButton#todayButton:hover, QPushButton#clearButton:hover, QPushButton#insertButton:hover {{
background-color: {colors['accent_hover']};
}}
+ QPushButton#todayButton:pressed, QPushButton#clearButton:pressed, QPushButton#insertButton:pressed {{
+ background-color: {colors['accent_pressed']};
+ }}
""")
- # 更新日历控件样式
+ # 更新日历控件样式 - 浅色主题优化版Apple设计风格
self.calendar.setStyleSheet(f"""
QCalendarWidget {{
background-color: {colors['surface']};
border: 1px solid {colors['border']};
- border-radius: 4px;
+ border-radius: 8px;
}}
QCalendarWidget QToolButton {{
- height: 30px;
- width: 80px;
+ height: 32px;
+ width: 85px;
color: {colors['text']};
- font-size: 12px;
- font-weight: bold;
+ font-size: 13px;
+ font-weight: 500;
background-color: {colors['surface']};
border: 1px solid {colors['border']};
- border-radius: 4px;
+ border-radius: 6px;
}}
QCalendarWidget QToolButton:hover {{
background-color: {colors['surface_hover']};
}}
+ QCalendarWidget QToolButton:pressed {{
+ background-color: {colors['surface_pressed']};
+ }}
QCalendarWidget QMenu {{
width: 150px;
left: 20px;
@@ -337,15 +359,16 @@ class CalendarFloatingWidget(QWidget):
font-size: 12px;
background-color: {colors['surface']};
border: 1px solid {colors['border']};
+ border-radius: 6px;
}}
QCalendarWidget QSpinBox {{
- width: 80px;
+ width: 85px;
font-size: 12px;
background-color: {colors['surface']};
selection-background-color: {colors['accent']};
selection-color: white;
border: 1px solid {colors['border']};
- border-radius: 4px;
+ border-radius: 6px;
color: {colors['text']};
}}
QCalendarWidget QSpinBox::up-button {{
@@ -376,6 +399,9 @@ class CalendarFloatingWidget(QWidget):
background-color: {colors['surface']};
color: {colors['text']};
}}
+ QCalendarWidget QAbstractItemView:disabled {{
+ color: {colors['text_disabled']};
+ }}
QCalendarWidget QWidget#qt_calendar_navigationbar {{
background-color: {colors['surface']};
}}
diff --git a/src/ui/calendar_widget.py b/src/ui/calendar_widget.py
index 5331faf..f3351b0 100644
--- a/src/ui/calendar_widget.py
+++ b/src/ui/calendar_widget.py
@@ -277,153 +277,205 @@ class CalendarWidget(QWidget):
theme_manager.theme_changed.connect(self.on_theme_changed)
# 应用当前主题
- self.apply_theme()
+ current_theme = theme_manager.is_dark_theme()
+ self.apply_theme(current_theme)
- def apply_theme(self):
- """应用主题样式"""
+ def apply_theme(self, is_dark_theme):
+ """应用主题样式 - 优化Apple设计风格"""
is_dark = theme_manager.is_dark_theme()
if is_dark:
- # 深色主题样式
+ # 深色主题样式 - 优化版Apple设计风格
self.setStyleSheet("""
QWidget {
- background-color: #2c2c2e;
- color: #f0f0f0;
+ background-color: #1c1c1e;
+ color: #e8e8ed;
}
""")
# 更新日历控件样式
self.calendar.setStyleSheet("""
QCalendarWidget {
- background-color: #2c2c2e;
- border: 1px solid #404040;
- border-radius: 4px;
+ background-color: #1c1c1e;
+ border: 1px solid #3a3a3c;
+ border-radius: 8px;
}
QCalendarWidget QToolButton {
- height: 30px;
- width: 80px;
- color: #f0f0f0;
- font-size: 12px;
- font-weight: bold;
- background-color: #3a3a3c;
- border: 1px solid #4a4a4c;
- border-radius: 4px;
+ height: 32px;
+ width: 85px;
+ color: #e8e8ed;
+ font-size: 13px;
+ font-weight: 500;
+ background-color: #2c2c2e;
+ border: 1px solid #3a3a3c;
+ border-radius: 6px;
}
- QCalendarWidget QToolButton:hover {
+ QCalendarWidget QToolButton:pressed {
background-color: #4a4a4c;
+ border: 1px solid #5a5a5c;
}
- QCalendarWidget QMenu {
- width: 150px;
- left: 20px;
- color: #f0f0f0;
- font-size: 12px;
+ QCalendarWidget QToolButton:hover {
background-color: #3a3a3c;
border: 1px solid #4a4a4c;
}
+ QCalendarWidget QMenu {
+ width: 160px;
+ left: 20px;
+ color: #e8e8ed;
+ font-size: 13px;
+ background-color: #2c2c2e;
+ border: 1px solid #3a3a3c;
+ border-radius: 6px;
+ }
+ QCalendarWidget QMenu::item:selected {
+ background-color: #0a84ff;
+ color: #ffffff;
+ }
QCalendarWidget QSpinBox {
- width: 80px;
- font-size: 12px;
- background-color: #3a3a3c;
+ width: 85px;
+ font-size: 13px;
+ background-color: #2c2c2e;
selection-background-color: #0a84ff;
selection-color: #ffffff;
- border: 1px solid #4a4a4c;
- border-radius: 4px;
- color: #f0f0f0;
+ border: 1px solid #3a3a3c;
+ border-radius: 6px;
+ color: #e8e8ed;
+ padding: 2px;
}
QCalendarWidget QSpinBox::up-button {
subcontrol-origin: border;
subcontrol-position: top right;
- width: 20px;
+ width: 22px;
+ border: 1px solid #3a3a3c;
+ background-color: #2c2c2e;
+ border-radius: 0 6px 0 0;
}
QCalendarWidget QSpinBox::down-button {
subcontrol-origin: border;
subcontrol-position: bottom right;
- width: 20px;
+ width: 22px;
+ border: 1px solid #3a3a3c;
+ background-color: #2c2c2e;
+ border-radius: 0 0 6px 0;
+ }
+ QCalendarWidget QSpinBox::up-button:hover,
+ QCalendarWidget QSpinBox::down-button:hover {
+ background-color: #3a3a3c;
+ }
+ QCalendarWidget QSpinBox::up-button:pressed,
+ QCalendarWidget QSpinBox::down-button:pressed {
+ background-color: #4a4a4c;
}
QCalendarWidget QSpinBox::up-arrow {
- width: 10px;
- height: 10px;
+ width: 12px;
+ height: 12px;
}
QCalendarWidget QSpinBox::down-arrow {
- width: 10px;
- height: 10px;
+ width: 12px;
+ height: 12px;
}
QCalendarWidget QWidget {
- alternate-background-color: #3a3a3c;
+ alternate-background-color: #2c2c2e;
}
QCalendarWidget QAbstractItemView:enabled {
- font-size: 12px;
+ font-size: 13px;
selection-background-color: #0a84ff;
selection-color: #ffffff;
- background-color: #2c2c2e;
- color: #f0f0f0;
+ background-color: #121212;
+ color: #e8e8ed;
+ }
+ QCalendarWidget QAbstractItemView:disabled {
+ color: #8a8a8d;
}
QCalendarWidget QWidget#qt_calendar_navigationbar {
- background-color: #3a3a3c;
+ background-color: #2c2c2e;
}
""")
# 更新标签样式
- self.date_label.setStyleSheet("QLabel { color: #a0a0a0; }")
+ self.date_label.setStyleSheet("QLabel { color: #8a8a8d; font-size: 12px; font-weight: 500; }")
# 更新按钮样式
self.close_btn.setStyleSheet("""
QPushButton {
+ background-color: #2c2c2e;
+ border: 1px solid #3a3a3c;
+ border-radius: 14px;
+ font-size: 18px;
+ font-weight: 600;
+ color: #e8e8ed;
+ padding: 6px;
+ }
+ QPushButton:hover {
background-color: #3a3a3c;
border: 1px solid #4a4a4c;
- border-radius: 12px;
- font-size: 16px;
- font-weight: bold;
- color: #f0f0f0;
}
- QPushButton:hover {
+ QPushButton:pressed {
background-color: #4a4a4c;
+ border: 1px solid #5a5a5c;
}
""")
self.today_btn.setStyleSheet("""
QPushButton {
background-color: #0a84ff;
- color: white;
+ color: #ffffff;
border: none;
- border-radius: 4px;
- padding: 5px 10px;
+ border-radius: 6px;
+ padding: 6px 12px;
+ font-weight: 500;
+ font-size: 12px;
}
QPushButton:hover {
- background-color: #0066cc;
+ background-color: #0071e3;
+ }
+ QPushButton:pressed {
+ background-color: #0051d5;
}
""")
self.clear_btn.setStyleSheet("""
QPushButton {
+ background-color: #2c2c2e;
+ color: #e8e8ed;
+ border: 1px solid #3a3a3c;
+ border-radius: 6px;
+ padding: 6px 12px;
+ font-weight: 500;
+ font-size: 12px;
+ }
+ QPushButton:hover {
background-color: #3a3a3c;
- color: #f0f0f0;
border: 1px solid #4a4a4c;
- border-radius: 4px;
- padding: 5px 10px;
}
- QPushButton:hover {
+ QPushButton:pressed {
background-color: #4a4a4c;
+ border: 1px solid #5a5a5c;
}
""")
self.insert_btn.setStyleSheet("""
QPushButton {
- background-color: #32d74b;
- color: #000000;
+ background-color: #34c759;
+ color: #ffffff;
border: none;
- border-radius: 4px;
- padding: 5px 10px;
+ border-radius: 6px;
+ padding: 6px 12px;
+ font-weight: 500;
+ font-size: 12px;
}
QPushButton:hover {
- background-color: #24b334;
+ background-color: #30d158;
+ }
+ QPushButton:pressed {
+ background-color: #2eb750;
}
""")
else:
- # 浅色主题样式
+ # 浅色主题样式 - 优化版Apple设计风格
self.setStyleSheet("""
QWidget {
- background-color: white;
+ background-color: #f8f8f8;
color: #333333;
}
""")
@@ -431,68 +483,96 @@ class CalendarWidget(QWidget):
# 更新日历控件样式
self.calendar.setStyleSheet("""
QCalendarWidget {
- background-color: white;
- border: 1px solid #ccc;
- border-radius: 4px;
+ background-color: #ffffff;
+ border: 1px solid #e0e0e0;
+ border-radius: 6px;
}
QCalendarWidget QToolButton {
- height: 30px;
- width: 80px;
- color: #333;
- font-size: 12px;
- font-weight: bold;
+ height: 32px;
+ width: 85px;
+ color: #333333;
+ font-size: 13px;
+ font-weight: 500;
+ background-color: #ffffff;
+ border: 1px solid #e0e0e0;
+ border-radius: 6px;
+ }
+ QCalendarWidget QToolButton:pressed {
background-color: #f0f0f0;
- border: 1px solid #ccc;
- border-radius: 4px;
+ border: 1px solid #c0c0c0;
}
QCalendarWidget QToolButton:hover {
- background-color: #e0e0e0;
+ background-color: #f0f0f0;
+ border: 1px solid #d0d0d0;
}
QCalendarWidget QMenu {
- width: 150px;
+ width: 160px;
left: 20px;
- color: #333;
- font-size: 12px;
- background-color: white;
- border: 1px solid #ccc;
+ color: #333333;
+ font-size: 13px;
+ background-color: #ffffff;
+ border: 1px solid #e0e0e0;
+ border-radius: 6px;
+ }
+ QCalendarWidget QMenu::item:selected {
+ background-color: #007aff;
+ color: #ffffff;
}
QCalendarWidget QSpinBox {
- width: 80px;
- font-size: 12px;
- background-color: #f0f0f0;
- selection-background-color: #0078d7;
- selection-color: white;
- border: 1px solid #ccc;
- border-radius: 4px;
- color: #333;
+ width: 85px;
+ font-size: 13px;
+ background-color: #ffffff;
+ selection-background-color: #007aff;
+ selection-color: #ffffff;
+ border: 1px solid #e0e0e0;
+ border-radius: 6px;
+ color: #333333;
+ padding: 2px;
}
QCalendarWidget QSpinBox::up-button {
subcontrol-origin: border;
subcontrol-position: top right;
- width: 20px;
+ width: 22px;
+ border: 1px solid #e0e0e0;
+ background-color: #ffffff;
+ border-radius: 0 6px 0 0;
}
QCalendarWidget QSpinBox::down-button {
subcontrol-origin: border;
subcontrol-position: bottom right;
- width: 20px;
+ width: 22px;
+ border: 1px solid #e0e0e0;
+ background-color: #ffffff;
+ border-radius: 0 0 6px 0;
+ }
+ QCalendarWidget QSpinBox::up-button:hover,
+ QCalendarWidget QSpinBox::down-button:hover {
+ background-color: #f0f0f0;
+ }
+ QCalendarWidget QSpinBox::up-button:pressed,
+ QCalendarWidget QSpinBox::down-button:pressed {
+ background-color: #e0e0e0;
}
QCalendarWidget QSpinBox::up-arrow {
- width: 10px;
- height: 10px;
+ width: 12px;
+ height: 12px;
}
QCalendarWidget QSpinBox::down-arrow {
- width: 10px;
- height: 10px;
+ width: 12px;
+ height: 12px;
}
QCalendarWidget QWidget {
- alternate-background-color: #f0f0f0;
+ alternate-background-color: #f8f8f8;
}
QCalendarWidget QAbstractItemView:enabled {
- font-size: 12px;
- selection-background-color: #0078d7;
- selection-color: white;
- background-color: white;
- color: #333;
+ font-size: 13px;
+ selection-background-color: #007aff;
+ selection-color: #ffffff;
+ background-color: #ffffff;
+ color: #333333;
+ }
+ QCalendarWidget QAbstractItemView:disabled {
+ color: #999999;
}
QCalendarWidget QWidget#qt_calendar_navigationbar {
background-color: #f8f8f8;
@@ -500,65 +580,88 @@ class CalendarWidget(QWidget):
""")
# 更新标签样式
- self.date_label.setStyleSheet("QLabel { color: #666; }")
+ self.date_label.setStyleSheet("QLabel { color: #666666; font-size: 12px; font-weight: 500; }")
# 更新按钮样式
self.close_btn.setStyleSheet("""
QPushButton {
- background-color: #f0f0f0;
- border: 1px solid #ccc;
- border-radius: 12px;
- font-size: 16px;
- font-weight: bold;
- color: #333;
+ background-color: #ffffff;
+ border: 1px solid #e0e0e0;
+ border-radius: 14px;
+ font-size: 18px;
+ font-weight: 600;
+ color: #333333;
+ padding: 6px;
}
QPushButton:hover {
+ background-color: #f0f0f0;
+ border: 1px solid #d0d0d0;
+ }
+ QPushButton:pressed {
background-color: #e0e0e0;
+ border: 1px solid #c0c0c0;
}
""")
self.today_btn.setStyleSheet("""
QPushButton {
- background-color: #0078d7;
- color: white;
+ background-color: #007aff;
+ color: #ffffff;
border: none;
- border-radius: 4px;
- padding: 5px 10px;
+ border-radius: 6px;
+ padding: 6px 12px;
+ font-weight: 500;
+ font-size: 12px;
}
QPushButton:hover {
- background-color: #005a9e;
+ background-color: #0056b3;
+ }
+ QPushButton:pressed {
+ background-color: #004494;
}
""")
self.clear_btn.setStyleSheet("""
QPushButton {
- background-color: #f0f0f0;
- color: #333;
- border: 1px solid #ccc;
- border-radius: 4px;
- padding: 5px 10px;
+ background-color: #ffffff;
+ color: #333333;
+ border: 1px solid #e0e0e0;
+ border-radius: 6px;
+ padding: 6px 12px;
+ font-weight: 500;
+ font-size: 12px;
}
QPushButton:hover {
+ background-color: #f0f0f0;
+ border: 1px solid #d0d0d0;
+ }
+ QPushButton:pressed {
background-color: #e0e0e0;
+ border: 1px solid #c0c0c0;
}
""")
self.insert_btn.setStyleSheet("""
QPushButton {
- background-color: #4CAF50;
- color: white;
+ background-color: #34c759;
+ color: #ffffff;
border: none;
- border-radius: 4px;
- padding: 5px 10px;
+ border-radius: 6px;
+ padding: 6px 12px;
+ font-weight: 500;
+ font-size: 12px;
}
QPushButton:hover {
- background-color: #45a049;
+ background-color: #2e8b57;
+ }
+ QPushButton:pressed {
+ background-color: #267349;
}
""")
def on_theme_changed(self, is_dark):
"""主题切换槽函数"""
- self.apply_theme()
+ self.apply_theme(is_dark)
if __name__ == "__main__":
diff --git a/src/ui/theme_manager.py b/src/ui/theme_manager.py
index 0978872..52d4578 100644
--- a/src/ui/theme_manager.py
+++ b/src/ui/theme_manager.py
@@ -153,67 +153,67 @@ class ThemeManager(QObject):
return self._get_light_stylesheet()
def _get_dark_stylesheet(self):
- """深色主题样式表 - Apple设计风格"""
+ """深色主题样式表 - 优化版Apple设计风格"""
return """
- /* Apple设计风格深色主题样式 */
+ /* 优化版Apple设计风格深色主题样式 */
/* 全局文字颜色和字体 - 使用Apple系统字体 */
QWidget {
- color: #f0f0f0;
+ color: #e8e8ed;
font-family: '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica Neue', 'Helvetica', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', sans-serif;
font-size: 13px;
}
- /* 主窗口 - Apple深色背景 */
+ /* 主窗口 - 优化后的深色背景 */
QMainWindow {
- background-color: #2c2c2e;
+ background-color: #1c1c1e;
}
- /* 菜单栏 - Apple深色风格 */
+ /* 菜单栏 - 优化版Apple深色风格 */
QMenuBar {
background-color: #2c2c2e;
border: none;
- border-bottom: 1px solid #404040;
+ border-bottom: 1px solid #3a3a3c;
font-size: 13px;
- color: #f0f0f0;
+ color: #e8e8ed;
padding: 4px 0;
}
QMenuBar::item {
background-color: transparent;
padding: 6px 12px;
- color: #f0f0f0;
- border-radius: 4px;
- margin: 0 1px;
+ color: #e8e8ed;
+ border-radius: 6px;
+ margin: 0 2px;
}
QMenuBar::item:selected {
- background-color: #404040;
- color: #f0f0f0;
+ background-color: #3a3a3c;
+ color: #e8e8ed;
}
QMenuBar::item:pressed {
- background-color: #505050;
- color: #f0f0f0;
+ background-color: #4a4a4c;
+ color: #e8e8ed;
}
- /* 菜单 - Apple深色风格 */
+ /* 菜单 - 优化版Apple深色风格 */
QMenu {
background-color: #2c2c2e;
- border: 1px solid #404040;
+ border: 1px solid #3a3a3c;
border-radius: 8px;
font-size: 13px;
- color: #f0f0f0;
+ color: #e8e8ed;
padding: 4px 0;
margin: 2px;
}
QMenu::item {
- color: #f0f0f0;
+ color: #e8e8ed;
background-color: transparent;
- border-radius: 4px;
+ border-radius: 6px;
margin: 0 4px;
- padding: 4px 20px;
+ padding: 6px 20px;
}
QMenu::item:selected {
@@ -228,22 +228,22 @@ class ThemeManager(QObject):
QMenu::separator {
height: 1px;
- background-color: #404040;
+ background-color: #3a3a3c;
margin: 4px 8px;
}
- /* 功能区 */
+ /* 功能区 - 优化背景色 */
QFrame {
- background-color: #2c2c2e;
+ background-color: #1c1c1e;
border: none;
}
- /* 组框 */
+ /* 组框 - 优化标题颜色 */
QGroupBox {
font-size: 12px;
font-weight: normal;
- color: #f0f0f0;
- background-color: #2c2c2e;
+ color: #e8e8ed;
+ background-color: #1c1c1e;
border: none;
border-radius: 8px;
margin-top: 5px;
@@ -254,27 +254,27 @@ class ThemeManager(QObject):
subcontrol-origin: margin;
left: 10px;
padding: 0 5px 0 5px;
- color: #a0a0a0;
+ color: #8a8a8d;
}
- /* 工具按钮 - Apple深色风格 */
+ /* 工具按钮 - 优化版Apple深色风格 */
QToolButton {
border: 1px solid transparent;
border-radius: 6px;
- background-color: #3a3a3c;
+ background-color: #2c2c2e;
font-size: 13px;
- color: #f0f0f0;
+ color: #e8e8ed;
padding: 6px 12px;
}
QToolButton:hover {
- background-color: #4a4a4c;
- border: 1px solid #5a5a5c;
+ background-color: #3a3a3c;
+ border: 1px solid #4a4a4c;
}
QToolButton:pressed {
- background-color: #5a5a5c;
- border: 1px solid #6a6a6c;
+ background-color: #4a4a4c;
+ border: 1px solid #5a5a5c;
}
QToolButton:checked {
@@ -283,18 +283,18 @@ class ThemeManager(QObject):
color: #ffffff;
}
- /* 切换按钮 */
+ /* 切换按钮 - 优化样式 */
QToolButton[checkable="true"] {
- border: 1px solid #4a4a4c;
+ border: 1px solid #3a3a3c;
border-radius: 6px;
- background-color: #3a3a3c;
+ background-color: #2c2c2e;
font-size: 12px;
- color: #f0f0f0;
+ color: #e8e8ed;
padding: 6px 12px;
}
QToolButton[checkable="true"]:hover {
- background-color: #4a4a4c;
+ background-color: #3a3a3c;
}
QToolButton[checkable="true"]:checked {
@@ -303,26 +303,26 @@ class ThemeManager(QObject):
color: #ffffff;
}
- /* 下拉框 - Apple深色风格 */
+ /* 下拉框 - 优化版Apple深色风格 */
QComboBox {
- background-color: #3a3a3c;
- border: 1px solid #4a4a4c;
+ background-color: #2c2c2e;
+ border: 1px solid #3a3a3c;
border-radius: 6px;
- color: #f0f0f0;
+ color: #e8e8ed;
padding: 4px 8px;
selection-background-color: #0a84ff;
selection-color: #ffffff;
}
QComboBox:hover {
- background-color: #4a4a4c;
- border: 1px solid #5a5a5c;
+ background-color: #3a3a3c;
+ border: 1px solid #4a4a4c;
}
QComboBox::drop-down {
border: none;
width: 20px;
- border-left: 1px solid #4a4a4c;
+ border-left: 1px solid #3a3a3c;
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
}
@@ -331,44 +331,44 @@ class ThemeManager(QObject):
image: none;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
- border-top: 6px solid #a0a0a0;
+ border-top: 6px solid #8a8a8d;
margin: 6px;
}
QComboBox QAbstractItemView {
- background-color: #2c2c2e;
- border: 1px solid #4a4a4c;
- color: #f0f0f0;
+ background-color: #1c1c1e;
+ border: 1px solid #3a3a3c;
+ color: #e8e8ed;
selection-background-color: #0a84ff;
selection-color: #ffffff;
}
- /* 文本编辑区域 - Apple深色风格 */
+ /* 文本编辑区域 - 优化版Apple深色风格 */
QTextEdit {
- background-color: #1c1c1e;
+ background-color: #121212;
border: none;
font-family: '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica Neue', 'Helvetica', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', sans-serif;
font-size: 15px;
- color: #f0f0f0;
+ color: #e8e8ed;
padding: 32px;
- line-height: 1.5;
- selection-background-color: #0066cc;
+ line-height: 1.6;
+ selection-background-color: #0a84ff;
selection-color: #ffffff;
}
- /* 状态栏 - Apple深色风格 */
+ /* 状态栏 - 优化版Apple深色风格 */
QStatusBar {
- background-color: #3a3a3c;
- border-top: 1px solid #4a4a4c;
+ background-color: #2c2c2e;
+ border-top: 1px solid #3a3a3c;
font-size: 12px;
- color: #a0a0a0;
+ color: #8a8a8d;
font-family: '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Helvetica Neue', 'Helvetica', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', sans-serif;
padding: 6px 12px;
}
- /* 标签 */
+ /* 标签 - 优化颜色 */
QLabel {
- color: #f0f0f0;
+ color: #e8e8ed;
background-color: transparent;
}
@@ -436,24 +436,24 @@ class ThemeManager(QObject):
background: none;
}
- /* 按钮 - Apple深色风格 */
+ /* 按钮 - 优化版Apple深色风格 */
QPushButton {
- background-color: #3a3a3c;
- color: #f0f0f0;
- border: 1px solid #4a4a4c;
+ background-color: #2c2c2e;
+ color: #e8e8ed;
+ border: 1px solid #3a3a3c;
border-radius: 6px;
padding: 6px 16px;
font-size: 13px;
}
QPushButton:hover {
- background-color: #4a4a4c;
- border: 1px solid #5a5a5c;
+ background-color: #3a3a3c;
+ border: 1px solid #4a4a4c;
}
QPushButton:pressed {
- background-color: #5a5a5c;
- border: 1px solid #6a6a6c;
+ background-color: #4a4a4c;
+ border: 1px solid #5a5a5c;
}
QPushButton:default {
@@ -815,22 +815,28 @@ class ThemeManager(QObject):
'background': '#1e1e1e',
'surface': '#2d2d2d',
'surface_hover': '#3c3c3c',
+ 'surface_pressed': '#4a4a4c',
'text': '#e0e0e0',
'text_secondary': '#b0b0b0',
+ 'text_disabled': '#8a8a8d',
'border': '#3c3c3c',
'accent': '#0078d4',
- 'accent_hover': '#106ebe'
+ 'accent_hover': '#106ebe',
+ 'accent_pressed': '#005a9e'
}
else:
return {
'background': '#f3f2f1',
'surface': '#ffffff',
'surface_hover': '#f0f0f0',
+ 'surface_pressed': '#e0e0e0',
'text': '#333333',
'text_secondary': '#666666',
+ 'text_disabled': '#999999',
'border': '#d0d0d0',
'accent': '#0078d7',
- 'accent_hover': '#005a9e'
+ 'accent_hover': '#005a9e',
+ 'accent_pressed': '#004a99'
}
diff --git a/src/word_main_window.py b/src/word_main_window.py
index 28973f1..bdf3bbc 100644
--- a/src/word_main_window.py
+++ b/src/word_main_window.py
@@ -359,7 +359,7 @@ class WordStyleMainWindow(QMainWindow):
# 更新日历组件样式
if hasattr(self, 'calendar_widget') and self.calendar_widget is not None:
# 日历组件有自己的主题管理机制,只需触发其主题更新
- self.calendar_widget.apply_theme()
+ self.calendar_widget.apply_theme(is_dark)
def update_ribbon_styles(self, is_dark):
"""更新功能区样式"""