Skip to content

Commit f587e4e

Browse files
authored
Merge pull request #191 from DreZeo/fix/ui-visual-polish
fix(ui): 修复窗口黑边、下拉框双层边框,优化滚动条/分割条与主题配色
2 parents 1e34167 + 2b614d7 commit f587e4e

3 files changed

Lines changed: 97 additions & 83 deletions

File tree

desktop_qt_ui/ui/styles.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,8 @@ def build_input_controls_stylesheet(
180180
background-color: {colors["bg_dropdown"]};
181181
alternate-background-color: {colors["bg_dropdown"]};
182182
color: {colors[text_color_key]};
183-
border: 1px solid {colors["border_input"]};
183+
border: none;
184+
border-radius: 0px;
184185
selection-background-color: {colors["dropdown_selection"]};
185186
selection-color: {colors["list_item_selected_text"]};
186187
outline: none;
@@ -266,14 +267,14 @@ def build_scrollbar_stylesheet(colors: dict, scope: str = "") -> str:
266267
return f"""
267268
{_scoped_selector(scope, "QScrollBar:vertical")},
268269
{_scoped_selector(scope, "QScrollBar:horizontal")} {{
269-
background: {colors["bg_scroll"]};
270-
border-radius: 6px;
270+
background: transparent;
271+
border-radius: 3px;
271272
border: none;
272273
}}
273274
{_scoped_selector(scope, "QScrollBar::handle:vertical")},
274275
{_scoped_selector(scope, "QScrollBar::handle:horizontal")} {{
275276
background: {colors["scroll_handle"]};
276-
border-radius: 6px;
277+
border-radius: 3px;
277278
}}
278279
{_scoped_selector(scope, "QScrollBar::handle:vertical:hover")},
279280
{_scoped_selector(scope, "QScrollBar::handle:horizontal:hover")} {{
@@ -632,10 +633,10 @@ def generate_application_stylesheet(theme: str) -> str:
632633
}}
633634
{build_scrollbar_stylesheet(c)}
634635
QScrollBar:vertical {{
635-
width: 10px;
636+
width: 6px;
636637
}}
637638
QScrollBar:horizontal {{
638-
height: 10px;
639+
height: 6px;
639640
}}
640641
QScrollBar::handle:vertical,
641642
QScrollBar::handle:horizontal {{

desktop_qt_ui/ui/theme.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,11 +314,12 @@ def _set_dwm_attr(attribute: int, data):
314314
_set_dwm_attr(DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, dark_mode)
315315

316316
caption_color = _to_colorref(colors["bg_window_shell"])
317-
border_color = _to_colorref(colors["border_sidebar"])
318317
text_color = _to_colorref(colors["text_bright"] if is_dark_caption else colors["text_accent"])
319318

320319
_set_dwm_attr(DWMWA_CAPTION_COLOR, caption_color)
321-
_set_dwm_attr(DWMWA_BORDER_COLOR, border_color)
320+
# 不设置 DWMWA_BORDER_COLOR:border_sidebar 是半透明色(如 rgba(0,0,0,0.05)),
321+
# 而 COLORREF 不支持 alpha,转换时会丢掉透明度变成纯黑/纯白描边。
322+
# 让 Windows 使用原生默认边框,配色更自然。
322323
_set_dwm_attr(DWMWA_TEXT_COLOR, text_color)
323324

324325
user32.SetWindowPos(

desktop_qt_ui/ui/theme_tokens.py

Lines changed: 87 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"light": {"base_theme": "light", "accent": "sky"},
1919
"dark": {"base_theme": "dark", "accent": "blue"},
2020
"gray": {"base_theme": "gray", "accent": "slate"},
21-
"ocean": {"base_theme": "dark", "accent": "teal"},
21+
"ocean": {"base_theme": "light", "accent": "blue"},
2222
"forest": {"base_theme": "gray", "accent": "green"},
2323
"sunset": {"base_theme": "gray", "accent": "orange"},
2424
"rose": {"base_theme": "dark", "accent": "rose"},
@@ -268,9 +268,9 @@
268268
"list_item_selected": "rgba(59, 130, 246, 0.12)",
269269
"list_item_selected_text": "#0F172A",
270270
"dropdown_selection": "rgba(59, 130, 246, 0.15)",
271-
"scroll_handle": "rgba(0, 0, 0, 0.15)",
272-
"scroll_handle_hover": "rgba(0, 0, 0, 0.25)",
273-
"splitter_handle": "rgba(0, 0, 0, 0.05)",
271+
"scroll_handle": "#D8DCE2",
272+
"scroll_handle_hover": "#C2C7D0",
273+
"splitter_handle": "transparent",
274274
"splitter_handle_hover": "rgba(59, 130, 246, 0.40)",
275275
"divider_accent_start": "#3B82F6",
276276
"divider_accent_end": "#2563EB",
@@ -443,74 +443,77 @@
443443

444444
_THEME_TOKEN_OVERRIDES = {
445445
"ocean": {
446-
"bg_gradient_start": "#061821",
447-
"bg_gradient_mid": "#0B2731",
448-
"bg_gradient_end": "#123947",
449-
"bg_window_shell": "#071922",
450-
"bg_shell_edge": "rgba(102, 184, 196, 0.18)",
451-
"bg_sidebar": "rgba(5, 18, 25, 0.97)",
452-
"bg_card": "rgba(11, 29, 39, 0.93)",
453-
"bg_card_border": "rgba(102, 176, 188, 0.24)",
454-
"bg_panel": "rgba(12, 31, 41, 0.95)",
455-
"bg_toolbar": "rgba(8, 21, 29, 0.97)",
456-
"bg_toolbar_border": "rgba(106, 180, 192, 0.24)",
457-
"bg_input": "rgba(8, 22, 31, 0.94)",
458-
"bg_input_focus": "rgba(11, 28, 37, 0.98)",
459-
"bg_text_edit": "rgba(8, 22, 30, 0.95)",
460-
"bg_list": "rgba(7, 19, 27, 0.82)",
461-
"bg_dropdown": "#0B2430",
462-
"bg_header_card": "rgba(14, 34, 45, 0.94)",
463-
"bg_desc_panel": "rgba(10, 25, 34, 0.96)",
464-
"bg_scroll": "rgba(10, 24, 33, 0.78)",
465-
"bg_settings_input": "rgba(8, 22, 31, 0.96)",
466-
"bg_canvas": "#10232D",
467-
"bg_canvas_overlay": "rgba(16, 35, 45, 0.95)",
468-
"bg_surface_raised": "rgba(17, 39, 50, 0.97)",
469-
"bg_surface_soft": "rgba(13, 31, 40, 0.76)",
470-
"text_primary": "#D7EDF2",
471-
"text_secondary": "#C0D7DC",
472-
"text_accent": "#F1FCFE",
473-
"text_bright": "#F8FEFF",
474-
"text_muted": "#9DBBC1",
475-
"text_brand": "#DDF2F5",
476-
"text_sidebar_group": "#84A8B0",
477-
"text_card_title": "#CCE1E5",
478-
"text_page_title": "#F0FCFF",
479-
"text_page_subtitle": "#95BBC2",
480-
"text_row_label": "#C4DDE2",
481-
"text_desc_header": "#D4ECF0",
482-
"text_desc_key": "#6F949C",
483-
"text_desc_text": "#B7CED3",
484-
"text_settings_label": "#BFD8DC",
485-
"text_divider_title": "#D7EEF2",
486-
"text_divider_sub": "#98BDC3",
487-
"border_input": "rgba(110, 146, 156, 0.48)",
488-
"border_input_hover": "rgba(126, 173, 183, 0.60)",
489-
"border_card": "rgba(102, 176, 188, 0.24)",
490-
"border_list": "rgba(103, 146, 156, 0.34)",
491-
"border_sidebar": "rgba(108, 151, 161, 0.20)",
492-
"border_tab": "rgba(81, 123, 133, 0.36)",
493-
"border_settings_input": "rgba(92, 134, 143, 0.40)",
494-
"border_settings_input_hover": "rgba(122, 169, 178, 0.58)",
495-
"border_subtle": "rgba(123, 162, 171, 0.14)",
496-
"btn_soft_bg": "rgba(21, 47, 58, 0.48)",
497-
"btn_soft_border": "rgba(104, 149, 159, 0.44)",
498-
"btn_soft_hover": "rgba(29, 59, 71, 0.70)",
499-
"btn_soft_pressed": "rgba(36, 72, 85, 0.86)",
500-
"btn_chip_bg": "rgba(20, 44, 55, 0.86)",
501-
"btn_chip_border": "rgba(89, 132, 142, 0.48)",
502-
"btn_chip_hover": "rgba(32, 61, 73, 0.96)",
503-
"tab_bg": "rgba(19, 42, 53, 0.84)",
504-
"scroll_handle": "rgba(108, 141, 149, 0.48)",
505-
"scroll_handle_hover": "rgba(130, 169, 179, 0.68)",
506-
"splitter_handle": "rgba(121, 155, 164, 0.20)",
507-
"divider_sub_line": "rgba(131, 168, 177, 0.18)",
508-
"checkbox_border": "rgba(97, 139, 148, 0.58)",
509-
"checkbox_bg": "rgba(8, 22, 31, 0.96)",
510-
"slider_groove": "rgba(53, 85, 94, 0.54)",
511-
"separator_color": "rgba(121, 155, 164, 0.32)",
512-
"desc_panel_border": "rgba(102, 176, 188, 0.26)",
513-
"settings_desc_panel_bg": "rgba(10, 25, 34, 0.96)",
446+
"bg_gradient_start": "#EAF2FB",
447+
"bg_gradient_mid": "#E2EEFA",
448+
"bg_gradient_end": "#D8E8F7",
449+
"bg_window_shell": "#EAF2FB",
450+
"bg_shell_edge": "rgba(74, 142, 224, 0.18)",
451+
"bg_sidebar": "#E4EDFA",
452+
"bg_card": "#FFFFFF",
453+
"bg_card_border": "rgba(74, 142, 224, 0.18)",
454+
"bg_panel": "#FFFFFF",
455+
"bg_toolbar": "#E8F0FA",
456+
"bg_toolbar_border": "rgba(74, 142, 224, 0.16)",
457+
"bg_input": "#FFFFFF",
458+
"bg_input_focus": "#F4F8FD",
459+
"bg_text_edit": "#FFFFFF",
460+
"bg_list": "#F4F8FD",
461+
"bg_dropdown": "#FFFFFF",
462+
"bg_header_card": "#FFFFFF",
463+
"bg_desc_panel": "#F4F8FD",
464+
"bg_scroll": "rgba(74, 142, 224, 0.08)",
465+
"bg_settings_input": "#FFFFFF",
466+
"bg_canvas": "#EAF2FB",
467+
"bg_canvas_overlay": "#FFFFFF",
468+
"bg_surface_raised": "#FFFFFF",
469+
"bg_surface_soft": "#EEF4FC",
470+
"text_primary": "#1E2A3A",
471+
"text_secondary": "#5A6B82",
472+
"text_accent": "#13243A",
473+
"text_bright": "#0B1A2E",
474+
"text_desc_name": "#0B1A2E",
475+
"text_muted": "#8A99AE",
476+
"text_disabled": "rgba(90, 107, 130, 0.45)",
477+
"text_brand": "#1E2A3A",
478+
"text_sidebar_group": "#8A99AE",
479+
"text_card_title": "#1E2A3A",
480+
"text_page_title": "#0B1A2E",
481+
"text_page_subtitle": "#5A6B82",
482+
"text_row_label": "#33425A",
483+
"text_desc_header": "#33425A",
484+
"text_desc_key": "#4A8EE0",
485+
"text_desc_text": "#4B5C74",
486+
"text_settings_label": "#33425A",
487+
"text_divider_title": "#1E2A3A",
488+
"text_divider_sub": "#5A6B82",
489+
"border_input": "rgba(74, 142, 224, 0.32)",
490+
"border_input_hover": "rgba(74, 142, 224, 0.55)",
491+
"border_card": "rgba(74, 142, 224, 0.16)",
492+
"border_list": "rgba(74, 142, 224, 0.16)",
493+
"border_sidebar": "rgba(74, 142, 224, 0.14)",
494+
"border_tab": "rgba(74, 142, 224, 0.20)",
495+
"border_settings_input": "rgba(74, 142, 224, 0.24)",
496+
"border_settings_input_hover": "rgba(74, 142, 224, 0.50)",
497+
"border_subtle": "rgba(74, 142, 224, 0.10)",
498+
"btn_soft_bg": "#EEF4FC",
499+
"btn_soft_border": "rgba(74, 142, 224, 0.22)",
500+
"btn_soft_hover": "#E2EDF9",
501+
"btn_soft_pressed": "#D6E6F6",
502+
"btn_soft_text": "#1E3A5F",
503+
"btn_chip_bg": "#EEF4FC",
504+
"btn_chip_border": "rgba(74, 142, 224, 0.24)",
505+
"btn_chip_hover": "#E2EDF9",
506+
"tab_bg": "#EEF4FC",
507+
"scroll_handle": "rgba(74, 142, 224, 0.35)",
508+
"scroll_handle_hover": "rgba(74, 142, 224, 0.55)",
509+
"splitter_handle": "transparent",
510+
"divider_sub_line": "rgba(74, 142, 224, 0.12)",
511+
"checkbox_border": "rgba(74, 142, 224, 0.40)",
512+
"checkbox_bg": "#FFFFFF",
513+
"slider_groove": "rgba(74, 142, 224, 0.18)",
514+
"separator_color": "rgba(74, 142, 224, 0.16)",
515+
"desc_panel_border": "rgba(74, 142, 224, 0.18)",
516+
"settings_desc_panel_bg": "#F4F8FD",
514517
},
515518
"forest": {
516519
"bg_gradient_start": "#1B2319",
@@ -541,15 +544,17 @@
541544
"text_secondary": "#D0D8CC",
542545
"text_accent": "#F6FAF4",
543546
"text_bright": "#FFFFFF",
547+
"text_desc_name": "#FFFFFF",
544548
"text_muted": "#AEB9A8",
549+
"text_disabled": "rgba(174, 185, 168, 0.45)",
545550
"text_brand": "#E7EEE4",
546551
"text_sidebar_group": "#9BA995",
547552
"text_card_title": "#D7E0D3",
548553
"text_page_title": "#F3F7F0",
549554
"text_page_subtitle": "#A5B29F",
550555
"text_row_label": "#D0D9CC",
551556
"text_desc_header": "#E1E9DE",
552-
"text_desc_key": "#91A18A",
557+
"text_desc_key": "#6FBF80",
553558
"text_desc_text": "#C7D0C3",
554559
"text_settings_label": "#CDD6CA",
555560
"text_divider_title": "#E1E9DE",
@@ -567,6 +572,7 @@
567572
"btn_soft_border": "rgba(127, 140, 122, 0.46)",
568573
"btn_soft_hover": "rgba(70, 82, 72, 0.80)",
569574
"btn_soft_pressed": "rgba(82, 96, 84, 0.94)",
575+
"btn_soft_text": "#F6FAF4",
570576
"btn_chip_bg": "rgba(54, 65, 55, 0.88)",
571577
"btn_chip_border": "rgba(107, 120, 101, 0.42)",
572578
"btn_chip_hover": "rgba(67, 79, 68, 0.96)",
@@ -611,15 +617,17 @@
611617
"text_secondary": "#E0CBBE",
612618
"text_accent": "#FFF8F2",
613619
"text_bright": "#FFFFFF",
620+
"text_desc_name": "#FFFFFF",
614621
"text_muted": "#C2A99A",
622+
"text_disabled": "rgba(194, 169, 154, 0.45)",
615623
"text_brand": "#F5E7DE",
616624
"text_sidebar_group": "#C29B86",
617625
"text_card_title": "#E9D5C8",
618626
"text_page_title": "#FFF6F0",
619627
"text_page_subtitle": "#C89F88",
620628
"text_row_label": "#E5D1C4",
621629
"text_desc_header": "#F2E3DA",
622-
"text_desc_key": "#B88E7B",
630+
"text_desc_key": "#EAA063",
623631
"text_desc_text": "#D8C1B5",
624632
"text_settings_label": "#DEC8BB",
625633
"text_divider_title": "#F2E3DA",
@@ -637,6 +645,7 @@
637645
"btn_soft_border": "rgba(158, 122, 102, 0.46)",
638646
"btn_soft_hover": "rgba(78, 57, 50, 0.80)",
639647
"btn_soft_pressed": "rgba(92, 67, 59, 0.94)",
648+
"btn_soft_text": "#F6BC8C",
640649
"btn_chip_bg": "rgba(60, 43, 38, 0.88)",
641650
"btn_chip_border": "rgba(136, 101, 84, 0.42)",
642651
"btn_chip_hover": "rgba(75, 54, 47, 0.96)",
@@ -681,15 +690,17 @@
681690
"text_secondary": "#DEC5D2",
682691
"text_accent": "#FFF4F8",
683692
"text_bright": "#FFFFFF",
693+
"text_desc_name": "#FFFFFF",
684694
"text_muted": "#C3A3B2",
695+
"text_disabled": "rgba(195, 163, 178, 0.45)",
685696
"text_brand": "#F7E5EE",
686697
"text_sidebar_group": "#C090A7",
687698
"text_card_title": "#EACFDC",
688699
"text_page_title": "#FFF4F9",
689700
"text_page_subtitle": "#CD9FB6",
690701
"text_row_label": "#E6CDD9",
691702
"text_desc_header": "#F2DEE8",
692-
"text_desc_key": "#B6839A",
703+
"text_desc_key": "#D67E96",
693704
"text_desc_text": "#D7BCC9",
694705
"text_settings_label": "#E0C7D3",
695706
"text_divider_title": "#F2DEE8",
@@ -707,6 +718,7 @@
707718
"btn_soft_border": "rgba(150, 109, 128, 0.44)",
708719
"btn_soft_hover": "rgba(70, 37, 56, 0.72)",
709720
"btn_soft_pressed": "rgba(83, 47, 68, 0.88)",
721+
"btn_soft_text": "#E6A1B4",
710722
"btn_chip_bg": "rgba(51, 25, 41, 0.86)",
711723
"btn_chip_border": "rgba(136, 95, 115, 0.48)",
712724
"btn_chip_hover": "rgba(67, 37, 54, 0.96)",

0 commit comments

Comments
 (0)