From 2347b4c741cbd93907c5d9848780c05deb3628a0 Mon Sep 17 00:00:00 2001 From: Jason Pruitt <55477390+Json-To-String@users.noreply.github.com> Date: Sun, 10 Aug 2025 00:20:22 -0400 Subject: [PATCH 1/8] Add themes support Added themes in plugins, added scaffolding for other users to add themes as well. Click buttons currently don't follow theme. --- blacs/plugins/theme/__init__.py | 303 +++++++++++++++++-- blacs/plugins/theme/theme.ui | 21 +- blacs/plugins/theme/themes/blue_theme.qss | 120 ++++++++ blacs/plugins/theme/themes/dark_theme.qss | 120 ++++++++ blacs/plugins/theme/themes/default_theme.qss | 75 +++++ blacs/plugins/theme/themes/warm_theme.qss | 120 ++++++++ 6 files changed, 735 insertions(+), 24 deletions(-) create mode 100644 blacs/plugins/theme/themes/blue_theme.qss create mode 100644 blacs/plugins/theme/themes/dark_theme.qss create mode 100644 blacs/plugins/theme/themes/default_theme.qss create mode 100644 blacs/plugins/theme/themes/warm_theme.qss diff --git a/blacs/plugins/theme/__init__.py b/blacs/plugins/theme/__init__.py index 77ba0d90..3f7c4cd9 100644 --- a/blacs/plugins/theme/__init__.py +++ b/blacs/plugins/theme/__init__.py @@ -12,15 +12,22 @@ ##################################################################### import logging import os - from qtutils import * - from blacs.plugins import PLUGINS_DIR name = "GUI Theme" module = "theme" # should be folder name logger = logging.getLogger('BLACS.plugin.%s'%module) +def load_theme(theme_name): + theme_path = os.path.join(PLUGINS_DIR, module, "themes", f"{theme_name}_theme.qss") + try: + with open(theme_path, "r") as f: + return f.read() + except Exception as e: + logger.warning(f"Could not load theme '{theme_name}': {e}") + return "" + DEFAULT_STYLESHEET = """DigitalOutput { font-size: 12px; @@ -99,6 +106,252 @@ } """ +# DARK_STYLESHEET = """ +# # /* ===== Global & Widget Defaults ===== */ +# # QWidget { +# # background-color: #0f1115; +# # color: #e6eef3; +# # selection-background-color: #2b6ea3; +# # selection-color: #ffffff; +# # font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; +# # } + +# # /* ===== Push Buttons ===== */ +# # QPushButton { +# # background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, +# # stop:0 #2a2e34, stop:1 #212427); +# # border: 1px solid #2e3338; +# # padding: 6px 10px; +# # border-radius: 6px; +# # color: #e6eef3; +# # } +# # QPushButton:hover { border-color: #3a7bd5; } +# # QPushButton:pressed { background-color: #1b1d20; } + +# # /* ===== LineEdits, TextEdits ===== */ +# # QLineEdit, QPlainTextEdit, QTextEdit { +# # background-color: #0c0d0f; +# # border: 1px solid #26282c; +# # padding: 6px; +# # border-radius: 4px; +# # color: #e6eef3; +# # } +# # QLineEdit:focus, QTextEdit:focus { border-color: #3a7bd5; } + +# # /* ===== Tables, Headers ===== */ +# # QHeaderView::section { +# # background-color: #131417; +# # color: #cfd8de; +# # padding: 6px; +# # border: 1px solid #232427; +# # } +# # QTableView, QTreeView, QListView { +# # background-color: #0b0c0e; +# # gridline-color: #17181b; +# # alternate-background-color: #0f1013; +# # } +# # QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { +# # background-color: #2b6ea3; +# # color: #fff; +# # } + +# # /* ===== Combo & Spin Boxes ===== */ +# # QComboBox, QSpinBox, QDoubleSpinBox { +# # background-color: #0c0d0f; +# # border: 1px solid #26282c; +# # padding: 4px; +# # color: #e6eef3; +# # } + +# # /* ===== Checkboxes / Radios ===== */ +# # QCheckBox, QRadioButton { spacing: 6px; } +# # QCheckBox::indicator, QRadioButton::indicator { +# # background-color: transparent; +# # border: 1px solid #3a3d42; +# # } + +# # /* ===== Progress Bar ===== */ +# # QProgressBar { +# # border: 1px solid #2b2f34; +# # background: #0c0d0f; +# # text-align: center; +# # border-radius: 6px; +# # } +# # QProgressBar::chunk { +# # background-color: #3a7bd5; +# # border-radius: 6px; +# # } + +# # /* ===== Tabs ===== */ +# # QTabWidget::pane { border: 1px solid #232427; } +# # QTabBar::tab { +# # background: #0f1115; +# # color: #cfd8de; +# # padding: 8px; +# # border: 1px solid #232427; +# # border-bottom: none; +# # border-top-left-radius: 6px; +# # border-top-right-radius: 6px; +# # } +# # QTabBar::tab:selected { background: #16181c; } + +# # /* ===== Dock Widgets ===== */ +# # QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } +# # QDockWidget::title { background: #101215; } + +# # /* ===== Menus & Tooltips ===== */ +# # QMenuBar, QMenu { +# # background-color: #0f1115; +# # color: #e6eef3; +# # } +# # QMenu::item:selected { background-color: #2b6ea3; color: #fff; } +# # QToolTip { +# # background-color: #1c1f22; +# # color: #e6eef3; +# # border: 1px solid #3a3f45; +# # padding: 6px; +# # } + +# # /* ===== Scrollbars & Splitters ===== */ +# # QScrollBar:vertical { +# # background: #0f1115; +# # width: 12px; +# # } +# # QScrollBar::handle:vertical { +# # background: #2b2e33; +# # min-height: 20px; +# # border-radius: 6px; +# # } +# # QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } +# # QSplitter::handle { background: #151618; } + +# # /* ===== Status Bar ===== */ +# # QStatusBar { background: #0f1115; color: #cfd8de; } + +# # """ + +# BLUE_STYLESHEET = """ +# /* ===== Global & Widget Defaults ===== */ +# QWidget { +# background-color: #0a0f1a; +# color: #e1e8f0; +# selection-background-color: #1e4a72; +# selection-color: #ffffff; +# font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; +# } + +# /* ===== Push Buttons ===== */ +# QPushButton { +# background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, +# stop:0 #1a2332, stop:1 #0f1520); +# border: 1px solid #1e2b3d; +# padding: 6px 10px; +# border-radius: 6px; +# color: #e1e8f0; +# } +# QPushButton:hover { border-color: #2563eb; } +# QPushButton:pressed { background-color: #0d1117; } + +# /* ===== LineEdits, TextEdits ===== */ +# QLineEdit, QPlainTextEdit, QTextEdit { +# background-color: #070b14; +# border: 1px solid #1a2332; +# padding: 6px; +# border-radius: 4px; +# color: #e1e8f0; +# } +# QLineEdit:focus, QTextEdit:focus { border-color: #2563eb; } + +# /* ===== Tables, Headers ===== */ +# QHeaderView::section { +# background-color: #0d1421; +# color: #b8c5d6; +# padding: 6px; +# border: 1px solid #1a2332; +# } +# QTableView, QTreeView, QListView { +# background-color: #060a12; +# gridline-color: #0f1520; +# alternate-background-color: #080d17; +# } +# QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { +# background-color: #1e4a72; +# color: #fff; +# } + +# /* ===== Combo & Spin Boxes ===== */ +# QComboBox, QSpinBox, QDoubleSpinBox { +# background-color: #070b14; +# border: 1px solid #1a2332; +# padding: 4px; +# color: #e1e8f0; +# } + +# /* ===== Checkboxes / Radios ===== */ +# QCheckBox, QRadioButton { spacing: 6px; } +# QCheckBox::indicator, QRadioButton::indicator { +# background-color: transparent; +# border: 1px solid #2c3e50; +# } + +# /* ===== Progress Bar ===== */ +# QProgressBar { +# border: 1px solid #1a2332; +# background: #070b14; +# text-align: center; +# border-radius: 6px; +# } +# QProgressBar::chunk { +# background-color: #2563eb; +# border-radius: 6px; +# } + +# /* ===== Tabs ===== */ +# QTabWidget::pane { border: 1px solid #1a2332; } +# QTabBar::tab { +# background: #0a0f1a; +# color: #b8c5d6; +# padding: 8px; +# border: 1px solid #1a2332; +# border-bottom: none; +# border-top-left-radius: 6px; +# border-top-right-radius: 6px; +# } +# QTabBar::tab:selected { background: #0f1520; } + +# /* ===== Dock Widgets ===== */ +# QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } +# QDockWidget::title { background: #0a0f1a; } + +# /* ===== Menus & Tooltips ===== */ +# QMenuBar, QMenu { +# background-color: #0a0f1a; +# color: #e1e8f0; +# } +# QMenu::item:selected { background-color: #1e4a72; color: #fff; } +# QToolTip { +# background-color: #0f1520; +# color: #e1e8f0; +# border: 1px solid #2c3e50; +# padding: 6px; +# } + +# /* ===== Scrollbars & Splitters ===== */ +# QScrollBar:vertical { +# background: #0a0f1a; +# width: 12px; +# } +# QScrollBar::handle:vertical { +# background: #1a2332; +# min-height: 20px; +# border-radius: 6px; +# } +# QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } +# QSplitter::handle { background: #0f1520; } + +# /* ===== Status Bar ===== */ +# QStatusBar { background: #0a0f1a; color: #b8c5d6; } +# """ def is_default_stylesheet(stylesheet): """Return whether a stylesheet is the same as the default stylesheet, modulo whitespace""" @@ -157,31 +410,49 @@ def close(self): class Setting(object): name = name - def __init__(self,data): - # This is our data store! + def __init__(self, data): self.data = data - if 'stylesheet' not in self.data or not self.data['stylesheet']: - # If it's absent or an empty string, use the default stylesheet: - self.data['stylesheet'] = DEFAULT_STYLESHEET - - def on_set_green_button_theme(self): - self.widgets['stylesheet'].appendPlainText(DEFAULT_STYLESHEET) + self.data['stylesheet'] = load_theme('default') or DEFAULT_STYLESHEET + + def on_set_default_theme(self): + self.widgets['stylesheet'].setPlainText(load_theme('default')) - # Create the page, return the page and an icon to use on the label (the class name attribute will be used for the label text) - def create_dialog(self,notebook): + def on_set_green_button_theme(self): + self.widgets['stylesheet'].setPlainText(DEFAULT_STYLESHEET) + + def create_dialog(self, notebook): ui = UiLoader().load(os.path.join(PLUGINS_DIR, module, 'theme.ui')) - # restore current stylesheet ui.stylesheet_text.setPlainText(self.data['stylesheet']) + # Populate theme_combo with available .qss files + theme_dir = os.path.join(PLUGINS_DIR, module, 'themes') + themes = [f for f in os.listdir(theme_dir) if f.endswith('.qss')] + theme_names = [os.path.splitext(f)[0].replace('_theme','') for f in themes] + ui.theme_combo.clear() + ui.theme_combo.addItems(theme_names) + # Select current theme if possible + current_theme = None + for name in theme_names: + if load_theme(name) == self.data['stylesheet']: + current_theme = name + break + if current_theme: + idx = theme_names.index(current_theme) + ui.theme_combo.setCurrentIndex(idx) + # Handler for theme selection + def on_theme_selected(idx): + theme_name = theme_names[idx] + ui.stylesheet_text.setPlainText(load_theme(theme_name)) + ui.theme_combo.currentIndexChanged.connect(on_theme_selected) ui.example_button.clicked.connect(self.on_set_green_button_theme) # save reference to widget self.widgets = {} self.widgets['stylesheet'] = ui.stylesheet_text self.widgets['example_button'] = ui.example_button - - return ui,None + self.widgets['theme_combo'] = ui.theme_combo + return ui, None def get_value(self,name): if name in self.data: @@ -206,5 +477,3 @@ def save(self): def close(self): self.widgets['example_button'].clicked.disconnect(self.on_set_green_button_theme) - - diff --git a/blacs/plugins/theme/theme.ui b/blacs/plugins/theme/theme.ui index 26b70f7c..ab9d6b77 100644 --- a/blacs/plugins/theme/theme.ui +++ b/blacs/plugins/theme/theme.ui @@ -54,13 +54,20 @@ - - - - Append example green digital out theme to custom stylesheet - - - + + + + Append example green digital out theme to custom stylesheet + + + + + + + Select a theme to load its stylesheet + + + diff --git a/blacs/plugins/theme/themes/blue_theme.qss b/blacs/plugins/theme/themes/blue_theme.qss new file mode 100644 index 00000000..250055df --- /dev/null +++ b/blacs/plugins/theme/themes/blue_theme.qss @@ -0,0 +1,120 @@ +/* ===== Global & Widget Defaults ===== */ +QWidget { + background-color: #0a0f1a; + color: #e1e8f0; + selection-background-color: #1e4a72; + selection-color: #ffffff; + font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; +} + +/* ===== Push Buttons ===== */ +QPushButton { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 #1a2332, stop:1 #0f1520); + border: 1px solid #1e2b3d; + padding: 6px 10px; + border-radius: 6px; + color: #e1e8f0; +} +QPushButton:hover { border-color: #2563eb; } +QPushButton:pressed { background-color: #0d1117; } + +/* ===== LineEdits, TextEdits ===== */ +QLineEdit, QPlainTextEdit, QTextEdit { + background-color: #070b14; + border: 1px solid #1a2332; + padding: 6px; + border-radius: 4px; + color: #e1e8f0; +} +QLineEdit:focus, QTextEdit:focus { border-color: #2563eb; } + +/* ===== Tables, Headers ===== */ +QHeaderView::section { + background-color: #0d1421; + color: #b8c5d6; + padding: 6px; + border: 1px solid #1a2332; +} +QTableView, QTreeView, QListView { + background-color: #060a12; + gridline-color: #0f1520; + alternate-background-color: #080d17; +} +QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { + background-color: #1e4a72; + color: #fff; +} + +/* ===== Combo & Spin Boxes ===== */ +QComboBox, QSpinBox, QDoubleSpinBox { + background-color: #070b14; + border: 1px solid #1a2332; + padding: 4px; + color: #e1e8f0; +} + +/* ===== Checkboxes / Radios ===== */ +QCheckBox, QRadioButton { spacing: 6px; } +QCheckBox::indicator, QRadioButton::indicator { + background-color: transparent; + border: 1px solid #2c3e50; +} + +/* ===== Progress Bar ===== */ +QProgressBar { + border: 1px solid #1a2332; + background: #070b14; + text-align: center; + border-radius: 6px; +} +QProgressBar::chunk { + background-color: #2563eb; + border-radius: 6px; +} + +/* ===== Tabs ===== */ +QTabWidget::pane { border: 1px solid #1a2332; } +QTabBar::tab { + background: #0a0f1a; + color: #b8c5d6; + padding: 8px; + border: 1px solid #1a2332; + border-bottom: none; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} +QTabBar::tab:selected { background: #0f1520; } + +/* ===== Dock Widgets ===== */ +QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } +QDockWidget::title { background: #0a0f1a; } + +/* ===== Menus & Tooltips ===== */ +QMenuBar, QMenu { + background-color: #0a0f1a; + color: #e1e8f0; +} +QMenu::item:selected { background-color: #1e4a72; color: #fff; } +QToolTip { + background-color: #0f1520; + color: #e1e8f0; + border: 1px solid #2c3e50; + padding: 6px; +} + +/* ===== Scrollbars & Splitters ===== */ +QScrollBar:vertical { + background: #0a0f1a; + width: 12px; +} +QScrollBar::handle:vertical { + background: #1a2332; + min-height: 20px; + border-radius: 6px; +} +QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } +QSplitter::handle { background: #0f1520; } + +/* ===== Status Bar ===== */ +QStatusBar { background: #0a0f1a; color: #b8c5d6; } diff --git a/blacs/plugins/theme/themes/dark_theme.qss b/blacs/plugins/theme/themes/dark_theme.qss new file mode 100644 index 00000000..fdb57bdc --- /dev/null +++ b/blacs/plugins/theme/themes/dark_theme.qss @@ -0,0 +1,120 @@ +/* ===== Global & Widget Defaults ===== */ +QWidget { + background-color: #0f1115; + color: #e6eef3; + selection-background-color: #2b6ea3; + selection-color: #ffffff; + font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; +} + +/* ===== Push Buttons ===== */ +QPushButton { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 #2a2e34, stop:1 #212427); + border: 1px solid #2e3338; + padding: 6px 10px; + border-radius: 6px; + color: #e6eef3; +} +QPushButton:hover { border-color: #3a7bd5; } +QPushButton:pressed { background-color: #1b1d20; } + +/* ===== LineEdits, TextEdits ===== */ +QLineEdit, QPlainTextEdit, QTextEdit { + background-color: #0c0d0f; + border: 1px solid #26282c; + padding: 6px; + border-radius: 4px; + color: #e6eef3; +} +QLineEdit:focus, QTextEdit:focus { border-color: #3a7bd5; } + +/* ===== Tables, Headers ===== */ +QHeaderView::section { + background-color: #131417; + color: #cfd8de; + padding: 6px; + border: 1px solid #232427; +} +QTableView, QTreeView, QListView { + background-color: #0b0c0e; + gridline-color: #17181b; + alternate-background-color: #0f1013; +} +QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { + background-color: #2b6ea3; + color: #fff; +} + +/* ===== Combo & Spin Boxes ===== */ +QComboBox, QSpinBox, QDoubleSpinBox { + background-color: #0c0d0f; + border: 1px solid #26282c; + padding: 4px; + color: #e6eef3; +} + +/* ===== Checkboxes / Radios ===== */ +QCheckBox, QRadioButton { spacing: 6px; } +QCheckBox::indicator, QRadioButton::indicator { + background-color: transparent; + border: 1px solid #3a3d42; +} + +/* ===== Progress Bar ===== */ +QProgressBar { + border: 1px solid #2b2f34; + background: #0c0d0f; + text-align: center; + border-radius: 6px; +} +QProgressBar::chunk { + background-color: #3a7bd5; + border-radius: 6px; +} + +/* ===== Tabs ===== */ +QTabWidget::pane { border: 1px solid #232427; } +QTabBar::tab { + background: #0f1115; + color: #cfd8de; + padding: 8px; + border: 1px solid #232427; + border-bottom: none; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} +QTabBar::tab:selected { background: #16181c; } + +/* ===== Dock Widgets ===== */ +QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } +QDockWidget::title { background: #101215; } + +/* ===== Menus & Tooltips ===== */ +QMenuBar, QMenu { + background-color: #0f1115; + color: #e6eef3; +} +QMenu::item:selected { background-color: #2b6ea3; color: #fff; } +QToolTip { + background-color: #1c1f22; + color: #e6eef3; + border: 1px solid #3a3f45; + padding: 6px; +} + +/* ===== Scrollbars & Splitters ===== */ +QScrollBar:vertical { + background: #0f1115; + width: 12px; +} +QScrollBar::handle:vertical { + background: #2b2e33; + min-height: 20px; + border-radius: 6px; +} +QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } +QSplitter::handle { background: #151618; } + +/* ===== Status Bar ===== */ +QStatusBar { background: #0f1115; color: #cfd8de; } diff --git a/blacs/plugins/theme/themes/default_theme.qss b/blacs/plugins/theme/themes/default_theme.qss new file mode 100644 index 00000000..61781f97 --- /dev/null +++ b/blacs/plugins/theme/themes/default_theme.qss @@ -0,0 +1,75 @@ +DigitalOutput { + font-size: 12px; + background-color: rgb(50,100,50,255); + border: 1px solid rgb(50,100,50,128); + border-radius: 3px; + padding: 2px; + color: #202020; +} + +DigitalOutput:hover { + background-color: rgb(50,130,50); + border: None; +} + +DigitalOutput:disabled{ + background-color: rgb(50,100,50,128); + color: #505050; +} + +DigitalOutput:checked { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 rgb(32,200,32), stop: 1 rgb(32,255,32)); + border: 1px solid #8f8f91; + color: #000000; +} + +DigitalOutput:hover:checked { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 rgb(32,200,32), stop: 1 rgb(120,255,120)); + border: 1px solid #8f8f91; +} + +DigitalOutput:checked:disabled{ + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 rgba(32,200,32,128), stop: 1 rgba(32,255,32,128)); + color: #606060; +} + +InvertedDigitalOutput { + font-size: 12px; + background-color: rgb(70,100,170,255); + border: 1px solid rgb(70,100,170,128); + border-radius: 3px; + padding: 2px; + color: #202020; +} + +InvertedDigitalOutput:hover { + background-color: rgb(70, 130, 220); + border: None; +} + +InvertedDigitalOutput:disabled{ + background-color: rgba(70,100,170,128); + color: #505050; +} + +InvertedDigitalOutput:checked { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 rgb(50,150,221), stop: 1 rgb(32,192,255)); + border: 1px solid #8f8f91; + color: #000000; +} + +InvertedDigitalOutput:hover:checked { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 rgb(50,150,221), stop: 1 rgb(120,192,255)); + border: 1px solid #8f8f91; +} + +InvertedDigitalOutput:checked:disabled{ + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 rgba(50,150,221,128), stop: 1 rgba(32,192,255,128)); + color: #606060; +} diff --git a/blacs/plugins/theme/themes/warm_theme.qss b/blacs/plugins/theme/themes/warm_theme.qss new file mode 100644 index 00000000..e85574e3 --- /dev/null +++ b/blacs/plugins/theme/themes/warm_theme.qss @@ -0,0 +1,120 @@ +/* ===== Global & Widget Defaults ===== */ +QWidget { + background-color: #1a1510; + color: #f0e6d2; + selection-background-color: #b8860b; + selection-color: #ffffff; + font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; +} + +/* ===== Push Buttons ===== */ +QPushButton { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 #332a1a, stop:1 #201b10); + border: 1px solid #3d2f1e; + padding: 6px 10px; + border-radius: 6px; + color: #f0e6d2; +} +QPushButton:hover { border-color: #d2691e; } +QPushButton:pressed { background-color: #17130d; } + +/* ===== LineEdits, TextEdits ===== */ +QLineEdit, QPlainTextEdit, QTextEdit { + background-color: #14110a; + border: 1px solid #2a1f14; + padding: 6px; + border-radius: 4px; + color: #f0e6d2; +} +QLineEdit:focus, QTextEdit:focus { border-color: #d2691e; } + +/* ===== Tables, Headers ===== */ +QHeaderView::section { + background-color: #211a0d; + color: #d6c5a8; + padding: 6px; + border: 1px solid #2a1f14; +} +QTableView, QTreeView, QListView { + background-color: #120f08; + gridline-color: #1f1a0f; + alternate-background-color: #171308; +} +QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { + background-color: #b8860b; + color: #fff; +} + +/* ===== Combo & Spin Boxes ===== */ +QComboBox, QSpinBox, QDoubleSpinBox { + background-color: #14110a; + border: 1px solid #2a1f14; + padding: 4px; + color: #f0e6d2; +} + +/* ===== Checkboxes / Radios ===== */ +QCheckBox, QRadioButton { spacing: 6px; } +QCheckBox::indicator, QRadioButton::indicator { + background-color: transparent; + border: 1px solid #4a3d2c; +} + +/* ===== Progress Bar ===== */ +QProgressBar { + border: 1px solid #2a1f14; + background: #14110a; + text-align: center; + border-radius: 6px; +} +QProgressBar::chunk { + background-color: #cd853f; + border-radius: 6px; +} + +/* ===== Tabs ===== */ +QTabWidget::pane { border: 1px solid #2a1f14; } +QTabBar::tab { + background: #1a1510; + color: #d6c5a8; + padding: 8px; + border: 1px solid #2a1f14; + border-bottom: none; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} +QTabBar::tab:selected { background: #201b10; } + +/* ===== Dock Widgets ===== */ +QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } +QDockWidget::title { background: #1a1510; } + +/* ===== Menus & Tooltips ===== */ +QMenuBar, QMenu { + background-color: #1a1510; + color: #f0e6d2; +} +QMenu::item:selected { background-color: #b8860b; color: #fff; } +QToolTip { + background-color: #201b10; + color: #f0e6d2; + border: 1px solid #4a3d2c; + padding: 6px; +} + +/* ===== Scrollbars & Splitters ===== */ +QScrollBar:vertical { + background: #1a1510; + width: 12px; +} +QScrollBar::handle:vertical { + background: #332a1a; + min-height: 20px; + border-radius: 6px; +} +QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } +QSplitter::handle { background: #201b10; } + +/* ===== Status Bar ===== */ +QStatusBar { background: #1a1510; color: #d6c5a8; } From 04594965aa6fff1b1907757ed1ef55d319ba65ab Mon Sep 17 00:00:00 2001 From: Jason Pruitt Date: Thu, 14 Aug 2025 01:22:07 -0400 Subject: [PATCH 2/8] Fix button click color setting, move override from main.ui to specific .qss --- blacs/main.ui | 58 -- blacs/oldmain.ui | 742 +++++++++++++++++++ blacs/plugins/theme/themes/blue_theme.qss | 6 +- blacs/plugins/theme/themes/dark_theme.qss | 11 +- blacs/plugins/theme/themes/default_theme.qss | 59 ++ blacs/plugins/theme/themes/warm_theme.qss | 7 +- 6 files changed, 820 insertions(+), 63 deletions(-) create mode 100644 blacs/oldmain.ui diff --git a/blacs/main.ui b/blacs/main.ui index d79727e1..1c090a90 100644 --- a/blacs/main.ui +++ b/blacs/main.ui @@ -24,64 +24,6 @@ padding: 4px; } -QPushButton:hover { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #f6f7fa, stop: 1 #dadbde); - border: 1px solid #8f8f91; - border-radius: 3px; - } - - QPushButton:pressed { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #dadbde, stop: 1 #f6f7fa); - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QPushButton:checked { - background-color: #dadbde; - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QPushButton:hover:checked { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #dadbde, stop: 1 #f6f7fa); - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QToolButton { - border: none; - padding: 2px; - } - -QToolButton:hover { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #f6f7fa, stop: 1 #dadbde); - border: 1px solid #8f8f91; - border-radius: 3px; - } - - QToolButton:pressed { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #dadbde, stop: 1 #f6f7fa); - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QToolButton:checked { - background-color: #dadbde; - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QToolButton:hover:checked { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #dadbde, stop: 1 #f6f7fa); - border: 1px solid #8f8f91; - border-radius: 3px; - } diff --git a/blacs/oldmain.ui b/blacs/oldmain.ui new file mode 100644 index 00000000..d79727e1 --- /dev/null +++ b/blacs/oldmain.ui @@ -0,0 +1,742 @@ + + + BLACS + + + + 0 + 0 + 821 + 723 + + + + blacs - the labscript suite + + + + :/qtutils/custom/blacs.png:/qtutils/custom/blacs.png + + + + QPushButton { + border: none; + padding: 4px; + } + +QPushButton:hover { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #f6f7fa, stop: 1 #dadbde); + border: 1px solid #8f8f91; + border-radius: 3px; + } + + QPushButton:pressed { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #dadbde, stop: 1 #f6f7fa); + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QPushButton:checked { + background-color: #dadbde; + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QPushButton:hover:checked { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #dadbde, stop: 1 #f6f7fa); + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QToolButton { + border: none; + padding: 2px; + } + +QToolButton:hover { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #f6f7fa, stop: 1 #dadbde); + border: 1px solid #8f8f91; + border-radius: 3px; + } + + QToolButton:pressed { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #dadbde, stop: 1 #f6f7fa); + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QToolButton:checked { + background-color: #dadbde; + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QToolButton:hover:checked { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #dadbde, stop: 1 #f6f7fa); + border: 1px solid #8f8f91; + border-radius: 3px; + } + + + + + 0 + + + 6 + + + + + QLayout::SetMinimumSize + + + + + 3 + + + QLayout::SetMinimumSize + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 0 + + + + + + + + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + QLayout::SetMinimumSize + + + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + QFrame::StyledPanel + + + + 6 + + + + + 6 + + + 0 + + + 0 + + + 0 + + + + + Qt::NoFocus + + + Pause the queue + + + Pause + + + + :/qtutils/fugue/control-pause.png:/qtutils/fugue/control-pause.png + + + true + + + false + + + + + + + 0 + + + 0 + + + + + Qt::NoFocus + + + Re-add shots to the end of the queue after completion + + + Repeat + + + + :/qtutils/fugue/arrow-repeat.png:/qtutils/fugue/arrow-repeat.png + + + true + + + + + + + Select repeat mode + + + + + + + :/qtutils/fugue/control-270.png:/qtutils/fugue/control-270.png + + + + 8 + 19 + + + + QToolButton::InstantPopup + + + Qt::NoArrow + + + + + + + + + false + + + Qt::NoFocus + + + Abort current shot in progress + + + Abort + + + + :/qtutils/fugue/cross-octagon.png:/qtutils/fugue/cross-octagon.png + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + 0 + 1 + + + + true + + + + + + QAbstractItemView::NoEditTriggers + + + QAbstractItemView::DropOnly + + + QAbstractItemView::ExtendedSelection + + + Qt::ElideLeft + + + 0 + + + true + + + + + + + QLayout::SetMinimumSize + + + + + Add to queue + + + + + + + :/qtutils/fugue/plus.png:/qtutils/fugue/plus.png + + + + + + + Qt::NoFocus + + + Delete selected shots from queue + + + + + + + :/qtutils/fugue/minus.png:/qtutils/fugue/minus.png + + + + + + + Qt::NoFocus + + + Clear queue of all shots + + + Clear + + + + :/qtutils/fugue/bin-metal-full.png:/qtutils/fugue/bin-metal-full.png + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + Move to top + + + + + + + :/qtutils/fugue/arrow-stop-090.png:/qtutils/fugue/arrow-stop-090.png + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + Move up + + + + + + + :/qtutils/fugue/arrow-090.png:/qtutils/fugue/arrow-090.png + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + Move down + + + + + + + :/qtutils/fugue/arrow-270.png:/qtutils/fugue/arrow-270.png + + + + + + + + 0 + 0 + + + + Qt::NoFocus + + + Move to bottom + + + + + + + :/qtutils/fugue/arrow-stop-270.png:/qtutils/fugue/arrow-stop-270.png + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 3 + + + 0 + + + + + [Queue status] + + + Qt::AlignCenter + + + + + + + <b>[running_shot.h5]</b> + + + Qt::AlignCenter + + + + + + + + + + + + + 0 + 0 + + + + Qt::Vertical + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + 6 + + + + + + + + + + 6 + + + + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + + + 6 + + + + + + + + + + 6 + + + + + + + + + + + + + + + + + + 0 + 0 + 821 + 25 + + + + + File + + + + + + + + + + + + + + + :/qtutils/fugue/folder-open.png:/qtutils/fugue/folder-open.png + + + Load front-panel + + + + + + :/qtutils/fugue/disk.png:/qtutils/fugue/disk.png + + + Save front-panel + + + + + + :/qtutils/fugue/cross-button.png:/qtutils/fugue/cross-button.png + + + Exit + + + + + + :/qtutils/fugue/gear.png:/qtutils/fugue/gear.png + + + Preferences + + + + + + :/qtutils/fugue/plus.png:/qtutils/fugue/plus.png + + + Add to queue + + + + + Edit + + + + + Select Globals + + + + + Recompile + + + + + + QueueTreeview + QTreeView +
qtutils/widgets.h
+
+
+ + + + + + actionExit + triggered() + BLACS + close() + + + -1 + -1 + + + 360 + 299 + + + + +
diff --git a/blacs/plugins/theme/themes/blue_theme.qss b/blacs/plugins/theme/themes/blue_theme.qss index 250055df..d8e10da4 100644 --- a/blacs/plugins/theme/themes/blue_theme.qss +++ b/blacs/plugins/theme/themes/blue_theme.qss @@ -17,7 +17,11 @@ QPushButton { color: #e1e8f0; } QPushButton:hover { border-color: #2563eb; } -QPushButton:pressed { background-color: #0d1117; } +QPushButton:pressed { background-color: #e1e8f0; } +QPushButton:checked { + color: #e1e8f0; + background-color: #0d1117; +} /* ===== LineEdits, TextEdits ===== */ QLineEdit, QPlainTextEdit, QTextEdit { diff --git a/blacs/plugins/theme/themes/dark_theme.qss b/blacs/plugins/theme/themes/dark_theme.qss index fdb57bdc..f3e019bc 100644 --- a/blacs/plugins/theme/themes/dark_theme.qss +++ b/blacs/plugins/theme/themes/dark_theme.qss @@ -17,7 +17,14 @@ QPushButton { color: #e6eef3; } QPushButton:hover { border-color: #3a7bd5; } -QPushButton:pressed { background-color: #1b1d20; } +QPushButton:pressed { + color: #3a7bd5; + background-color: #a5bddeff; +} +QPushButton:checked { + color: #3a7bd5; + background-color: #a5bddeff; +} /* ===== LineEdits, TextEdits ===== */ QLineEdit, QPlainTextEdit, QTextEdit { @@ -95,7 +102,7 @@ QMenuBar, QMenu { background-color: #0f1115; color: #e6eef3; } -QMenu::item:selected { background-color: #2b6ea3; color: #fff; } +QMenu::item:selected { background-color: #323232ff; color: #fff; } QToolTip { background-color: #1c1f22; color: #e6eef3; diff --git a/blacs/plugins/theme/themes/default_theme.qss b/blacs/plugins/theme/themes/default_theme.qss index 61781f97..06a5e2c8 100644 --- a/blacs/plugins/theme/themes/default_theme.qss +++ b/blacs/plugins/theme/themes/default_theme.qss @@ -1,3 +1,62 @@ +QPushButton:hover { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #f6f7fa, stop: 1 #dadbde); + border: 1px solid #8f8f91; + border-radius: 3px; + } + + QPushButton:pressed { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #dadbde, stop: 1 #f6f7fa); + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QPushButton:checked { + background-color: #dadbde; + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QPushButton:hover:checked { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #dadbde, stop: 1 #f6f7fa); + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QToolButton { + border: none; + padding: 2px; + } + +QToolButton:hover { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #f6f7fa, stop: 1 #dadbde); + border: 1px solid #8f8f91; + border-radius: 3px; + } + + QToolButton:pressed { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #dadbde, stop: 1 #f6f7fa); + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QToolButton:checked { + background-color: #dadbde; + border: 1px solid #8f8f91; + border-radius: 3px; + } + +QToolButton:hover:checked { + background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, + stop: 0 #dadbde, stop: 1 #f6f7fa); + border: 1px solid #8f8f91; + border-radius: 3px; + } + DigitalOutput { font-size: 12px; background-color: rgb(50,100,50,255); diff --git a/blacs/plugins/theme/themes/warm_theme.qss b/blacs/plugins/theme/themes/warm_theme.qss index e85574e3..5ee6c3fe 100644 --- a/blacs/plugins/theme/themes/warm_theme.qss +++ b/blacs/plugins/theme/themes/warm_theme.qss @@ -17,8 +17,11 @@ QPushButton { color: #f0e6d2; } QPushButton:hover { border-color: #d2691e; } -QPushButton:pressed { background-color: #17130d; } - +QPushButton:pressed { background-color: #d2691e; } +QPushButton:checked { + color: #14110a; + background-color: #d2691e; +} /* ===== LineEdits, TextEdits ===== */ QLineEdit, QPlainTextEdit, QTextEdit { background-color: #14110a; From 94c45f3bab9ae7036b25904f946ca02aff815b6e Mon Sep 17 00:00:00 2001 From: Jason Pruitt Date: Thu, 14 Aug 2025 01:22:35 -0400 Subject: [PATCH 3/8] Remove old file --- blacs/oldmain.ui | 742 ----------------------------------------------- 1 file changed, 742 deletions(-) delete mode 100644 blacs/oldmain.ui diff --git a/blacs/oldmain.ui b/blacs/oldmain.ui deleted file mode 100644 index d79727e1..00000000 --- a/blacs/oldmain.ui +++ /dev/null @@ -1,742 +0,0 @@ - - - BLACS - - - - 0 - 0 - 821 - 723 - - - - blacs - the labscript suite - - - - :/qtutils/custom/blacs.png:/qtutils/custom/blacs.png - - - - QPushButton { - border: none; - padding: 4px; - } - -QPushButton:hover { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #f6f7fa, stop: 1 #dadbde); - border: 1px solid #8f8f91; - border-radius: 3px; - } - - QPushButton:pressed { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #dadbde, stop: 1 #f6f7fa); - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QPushButton:checked { - background-color: #dadbde; - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QPushButton:hover:checked { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #dadbde, stop: 1 #f6f7fa); - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QToolButton { - border: none; - padding: 2px; - } - -QToolButton:hover { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #f6f7fa, stop: 1 #dadbde); - border: 1px solid #8f8f91; - border-radius: 3px; - } - - QToolButton:pressed { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #dadbde, stop: 1 #f6f7fa); - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QToolButton:checked { - background-color: #dadbde; - border: 1px solid #8f8f91; - border-radius: 3px; - } - -QToolButton:hover:checked { - background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, - stop: 0 #dadbde, stop: 1 #f6f7fa); - border: 1px solid #8f8f91; - border-radius: 3px; - } - - - - - 0 - - - 6 - - - - - QLayout::SetMinimumSize - - - - - 3 - - - QLayout::SetMinimumSize - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 40 - 0 - - - - - - - - - - - - - - - 0 - 0 - - - - Qt::Horizontal - - - - - QLayout::SetMinimumSize - - - - - - - 0 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - QFrame::StyledPanel - - - - 6 - - - - - 6 - - - 0 - - - 0 - - - 0 - - - - - Qt::NoFocus - - - Pause the queue - - - Pause - - - - :/qtutils/fugue/control-pause.png:/qtutils/fugue/control-pause.png - - - true - - - false - - - - - - - 0 - - - 0 - - - - - Qt::NoFocus - - - Re-add shots to the end of the queue after completion - - - Repeat - - - - :/qtutils/fugue/arrow-repeat.png:/qtutils/fugue/arrow-repeat.png - - - true - - - - - - - Select repeat mode - - - - - - - :/qtutils/fugue/control-270.png:/qtutils/fugue/control-270.png - - - - 8 - 19 - - - - QToolButton::InstantPopup - - - Qt::NoArrow - - - - - - - - - false - - - Qt::NoFocus - - - Abort current shot in progress - - - Abort - - - - :/qtutils/fugue/cross-octagon.png:/qtutils/fugue/cross-octagon.png - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - - 0 - 1 - - - - true - - - - - - QAbstractItemView::NoEditTriggers - - - QAbstractItemView::DropOnly - - - QAbstractItemView::ExtendedSelection - - - Qt::ElideLeft - - - 0 - - - true - - - - - - - QLayout::SetMinimumSize - - - - - Add to queue - - - - - - - :/qtutils/fugue/plus.png:/qtutils/fugue/plus.png - - - - - - - Qt::NoFocus - - - Delete selected shots from queue - - - - - - - :/qtutils/fugue/minus.png:/qtutils/fugue/minus.png - - - - - - - Qt::NoFocus - - - Clear queue of all shots - - - Clear - - - - :/qtutils/fugue/bin-metal-full.png:/qtutils/fugue/bin-metal-full.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - 0 - 0 - - - - Qt::NoFocus - - - Move to top - - - - - - - :/qtutils/fugue/arrow-stop-090.png:/qtutils/fugue/arrow-stop-090.png - - - - - - - - 0 - 0 - - - - Qt::NoFocus - - - Move up - - - - - - - :/qtutils/fugue/arrow-090.png:/qtutils/fugue/arrow-090.png - - - - - - - - 0 - 0 - - - - Qt::NoFocus - - - Move down - - - - - - - :/qtutils/fugue/arrow-270.png:/qtutils/fugue/arrow-270.png - - - - - - - - 0 - 0 - - - - Qt::NoFocus - - - Move to bottom - - - - - - - :/qtutils/fugue/arrow-stop-270.png:/qtutils/fugue/arrow-stop-270.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - 3 - - - 0 - - - - - [Queue status] - - - Qt::AlignCenter - - - - - - - <b>[running_shot.h5]</b> - - - Qt::AlignCenter - - - - - - - - - - - - - 0 - 0 - - - - Qt::Vertical - - - - - 0 - 0 - - - - Qt::Horizontal - - - - - 6 - - - - - - - - - - 6 - - - - - - - - - - - 0 - 0 - - - - Qt::Horizontal - - - - - 6 - - - - - - - - - - 6 - - - - - - - - - - - - - - - - - - 0 - 0 - 821 - 25 - - - - - File - - - - - - - - - - - - - - - :/qtutils/fugue/folder-open.png:/qtutils/fugue/folder-open.png - - - Load front-panel - - - - - - :/qtutils/fugue/disk.png:/qtutils/fugue/disk.png - - - Save front-panel - - - - - - :/qtutils/fugue/cross-button.png:/qtutils/fugue/cross-button.png - - - Exit - - - - - - :/qtutils/fugue/gear.png:/qtutils/fugue/gear.png - - - Preferences - - - - - - :/qtutils/fugue/plus.png:/qtutils/fugue/plus.png - - - Add to queue - - - - - Edit - - - - - Select Globals - - - - - Recompile - - - - - - QueueTreeview - QTreeView -
qtutils/widgets.h
-
-
- - - - - - actionExit - triggered() - BLACS - close() - - - -1 - -1 - - - 360 - 299 - - - - -
From cf74569fafc911901e316dfa0bdb234ab4a1c565 Mon Sep 17 00:00:00 2001 From: Jason Pruitt Date: Thu, 4 Sep 2025 10:01:47 -0400 Subject: [PATCH 4/8] Swap dark checked button color for readability --- blacs/plugins/theme/__init__.py | 247 ---------------------- blacs/plugins/theme/themes/dark_theme.qss | 4 +- 2 files changed, 2 insertions(+), 249 deletions(-) diff --git a/blacs/plugins/theme/__init__.py b/blacs/plugins/theme/__init__.py index 3f7c4cd9..dd7c3878 100644 --- a/blacs/plugins/theme/__init__.py +++ b/blacs/plugins/theme/__init__.py @@ -106,253 +106,6 @@ def load_theme(theme_name): } """ -# DARK_STYLESHEET = """ -# # /* ===== Global & Widget Defaults ===== */ -# # QWidget { -# # background-color: #0f1115; -# # color: #e6eef3; -# # selection-background-color: #2b6ea3; -# # selection-color: #ffffff; -# # font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; -# # } - -# # /* ===== Push Buttons ===== */ -# # QPushButton { -# # background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, -# # stop:0 #2a2e34, stop:1 #212427); -# # border: 1px solid #2e3338; -# # padding: 6px 10px; -# # border-radius: 6px; -# # color: #e6eef3; -# # } -# # QPushButton:hover { border-color: #3a7bd5; } -# # QPushButton:pressed { background-color: #1b1d20; } - -# # /* ===== LineEdits, TextEdits ===== */ -# # QLineEdit, QPlainTextEdit, QTextEdit { -# # background-color: #0c0d0f; -# # border: 1px solid #26282c; -# # padding: 6px; -# # border-radius: 4px; -# # color: #e6eef3; -# # } -# # QLineEdit:focus, QTextEdit:focus { border-color: #3a7bd5; } - -# # /* ===== Tables, Headers ===== */ -# # QHeaderView::section { -# # background-color: #131417; -# # color: #cfd8de; -# # padding: 6px; -# # border: 1px solid #232427; -# # } -# # QTableView, QTreeView, QListView { -# # background-color: #0b0c0e; -# # gridline-color: #17181b; -# # alternate-background-color: #0f1013; -# # } -# # QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { -# # background-color: #2b6ea3; -# # color: #fff; -# # } - -# # /* ===== Combo & Spin Boxes ===== */ -# # QComboBox, QSpinBox, QDoubleSpinBox { -# # background-color: #0c0d0f; -# # border: 1px solid #26282c; -# # padding: 4px; -# # color: #e6eef3; -# # } - -# # /* ===== Checkboxes / Radios ===== */ -# # QCheckBox, QRadioButton { spacing: 6px; } -# # QCheckBox::indicator, QRadioButton::indicator { -# # background-color: transparent; -# # border: 1px solid #3a3d42; -# # } - -# # /* ===== Progress Bar ===== */ -# # QProgressBar { -# # border: 1px solid #2b2f34; -# # background: #0c0d0f; -# # text-align: center; -# # border-radius: 6px; -# # } -# # QProgressBar::chunk { -# # background-color: #3a7bd5; -# # border-radius: 6px; -# # } - -# # /* ===== Tabs ===== */ -# # QTabWidget::pane { border: 1px solid #232427; } -# # QTabBar::tab { -# # background: #0f1115; -# # color: #cfd8de; -# # padding: 8px; -# # border: 1px solid #232427; -# # border-bottom: none; -# # border-top-left-radius: 6px; -# # border-top-right-radius: 6px; -# # } -# # QTabBar::tab:selected { background: #16181c; } - -# # /* ===== Dock Widgets ===== */ -# # QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } -# # QDockWidget::title { background: #101215; } - -# # /* ===== Menus & Tooltips ===== */ -# # QMenuBar, QMenu { -# # background-color: #0f1115; -# # color: #e6eef3; -# # } -# # QMenu::item:selected { background-color: #2b6ea3; color: #fff; } -# # QToolTip { -# # background-color: #1c1f22; -# # color: #e6eef3; -# # border: 1px solid #3a3f45; -# # padding: 6px; -# # } - -# # /* ===== Scrollbars & Splitters ===== */ -# # QScrollBar:vertical { -# # background: #0f1115; -# # width: 12px; -# # } -# # QScrollBar::handle:vertical { -# # background: #2b2e33; -# # min-height: 20px; -# # border-radius: 6px; -# # } -# # QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } -# # QSplitter::handle { background: #151618; } - -# # /* ===== Status Bar ===== */ -# # QStatusBar { background: #0f1115; color: #cfd8de; } - -# # """ - -# BLUE_STYLESHEET = """ -# /* ===== Global & Widget Defaults ===== */ -# QWidget { -# background-color: #0a0f1a; -# color: #e1e8f0; -# selection-background-color: #1e4a72; -# selection-color: #ffffff; -# font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; -# } - -# /* ===== Push Buttons ===== */ -# QPushButton { -# background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, -# stop:0 #1a2332, stop:1 #0f1520); -# border: 1px solid #1e2b3d; -# padding: 6px 10px; -# border-radius: 6px; -# color: #e1e8f0; -# } -# QPushButton:hover { border-color: #2563eb; } -# QPushButton:pressed { background-color: #0d1117; } - -# /* ===== LineEdits, TextEdits ===== */ -# QLineEdit, QPlainTextEdit, QTextEdit { -# background-color: #070b14; -# border: 1px solid #1a2332; -# padding: 6px; -# border-radius: 4px; -# color: #e1e8f0; -# } -# QLineEdit:focus, QTextEdit:focus { border-color: #2563eb; } - -# /* ===== Tables, Headers ===== */ -# QHeaderView::section { -# background-color: #0d1421; -# color: #b8c5d6; -# padding: 6px; -# border: 1px solid #1a2332; -# } -# QTableView, QTreeView, QListView { -# background-color: #060a12; -# gridline-color: #0f1520; -# alternate-background-color: #080d17; -# } -# QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { -# background-color: #1e4a72; -# color: #fff; -# } - -# /* ===== Combo & Spin Boxes ===== */ -# QComboBox, QSpinBox, QDoubleSpinBox { -# background-color: #070b14; -# border: 1px solid #1a2332; -# padding: 4px; -# color: #e1e8f0; -# } - -# /* ===== Checkboxes / Radios ===== */ -# QCheckBox, QRadioButton { spacing: 6px; } -# QCheckBox::indicator, QRadioButton::indicator { -# background-color: transparent; -# border: 1px solid #2c3e50; -# } - -# /* ===== Progress Bar ===== */ -# QProgressBar { -# border: 1px solid #1a2332; -# background: #070b14; -# text-align: center; -# border-radius: 6px; -# } -# QProgressBar::chunk { -# background-color: #2563eb; -# border-radius: 6px; -# } - -# /* ===== Tabs ===== */ -# QTabWidget::pane { border: 1px solid #1a2332; } -# QTabBar::tab { -# background: #0a0f1a; -# color: #b8c5d6; -# padding: 8px; -# border: 1px solid #1a2332; -# border-bottom: none; -# border-top-left-radius: 6px; -# border-top-right-radius: 6px; -# } -# QTabBar::tab:selected { background: #0f1520; } - -# /* ===== Dock Widgets ===== */ -# QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } -# QDockWidget::title { background: #0a0f1a; } - -# /* ===== Menus & Tooltips ===== */ -# QMenuBar, QMenu { -# background-color: #0a0f1a; -# color: #e1e8f0; -# } -# QMenu::item:selected { background-color: #1e4a72; color: #fff; } -# QToolTip { -# background-color: #0f1520; -# color: #e1e8f0; -# border: 1px solid #2c3e50; -# padding: 6px; -# } - -# /* ===== Scrollbars & Splitters ===== */ -# QScrollBar:vertical { -# background: #0a0f1a; -# width: 12px; -# } -# QScrollBar::handle:vertical { -# background: #1a2332; -# min-height: 20px; -# border-radius: 6px; -# } -# QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } -# QSplitter::handle { background: #0f1520; } - -# /* ===== Status Bar ===== */ -# QStatusBar { background: #0a0f1a; color: #b8c5d6; } -# """ - def is_default_stylesheet(stylesheet): """Return whether a stylesheet is the same as the default stylesheet, modulo whitespace""" diff --git a/blacs/plugins/theme/themes/dark_theme.qss b/blacs/plugins/theme/themes/dark_theme.qss index f3e019bc..8f71708e 100644 --- a/blacs/plugins/theme/themes/dark_theme.qss +++ b/blacs/plugins/theme/themes/dark_theme.qss @@ -22,8 +22,8 @@ QPushButton:pressed { background-color: #a5bddeff; } QPushButton:checked { - color: #3a7bd5; - background-color: #a5bddeff; + color: #0f1115; + background-color: #e6eef3; } /* ===== LineEdits, TextEdits ===== */ From e19e3d1e46e8e7a4550e98239948f34a6a779595 Mon Sep 17 00:00:00 2001 From: Jason Pruitt Date: Thu, 4 Sep 2025 10:15:09 -0400 Subject: [PATCH 5/8] Add new green/black theme --- blacs/plugins/theme/themes/matrix_theme.qss | 127 ++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 blacs/plugins/theme/themes/matrix_theme.qss diff --git a/blacs/plugins/theme/themes/matrix_theme.qss b/blacs/plugins/theme/themes/matrix_theme.qss new file mode 100644 index 00000000..a8422432 --- /dev/null +++ b/blacs/plugins/theme/themes/matrix_theme.qss @@ -0,0 +1,127 @@ +/* ===== Global & Widget Defaults ===== */ +QWidget { + background-color: #0f1115; + color: #33FF00; + selection-background-color: #33FF33; + selection-color: #00FF33; + font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; +} + +/* ===== Push Buttons ===== */ +QPushButton { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 #2a2e34, stop:1 #212427); + border: 1px solid #0f1115; + padding: 6px 10px; + border-radius: 6px; + color: #33FF00; +} +QPushButton:hover { border-color: #33FF00; } +QPushButton:pressed { + color: #33FF00; + background-color: #0f1115; +} +QPushButton:checked { + color: #0f1115; + background-color: #33FF00; +} + +/* ===== LineEdits, TextEdits ===== */ +QLineEdit, QPlainTextEdit, QTextEdit { + background-color: #0f1115; + border: 1px solid #0f1115; + padding: 6px; + border-radius: 4px; + color: #33FF00; +} +QLineEdit:focus, QTextEdit:focus { border-color: #33FF00; } + +/* ===== Tables, Headers ===== */ +QHeaderView::section { + background-color: #131417; + color: #33FF00; + padding: 6px; + border: 1px solid #232427; +} +QTableView, QTreeView, QListView { + background-color: #0b0c0e; + gridline-color: #17181b; + alternate-background-color: #0f1013; +} +QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { + background-color: #2b6ea3; + color: #fff; +} + +/* ===== Combo & Spin Boxes ===== */ +QComboBox, QSpinBox, QDoubleSpinBox { + background-color: #0c0d0f; + border: 1px solid #26282c; + padding: 4px; + color: #33FF00; +} + +/* ===== Checkboxes / Radios ===== */ +QCheckBox, QRadioButton { spacing: 6px; } +QCheckBox::indicator, QRadioButton::indicator { + background-color: transparent; + border: 1px solid #3a3d42; +} + +/* ===== Progress Bar ===== */ +QProgressBar { + border: 1px solid #2b2f34; + background: #0c0d0f; + text-align: center; + border-radius: 6px; +} +QProgressBar::chunk { + background-color: #33FF00; + border-radius: 6px; +} + +/* ===== Tabs ===== */ +QTabWidget::pane { border: 1px solid #232427; } +QTabBar::tab { + background: #0f1115; + color: #33FF00; + padding: 8px; + border: 1px solid #232427; + border-bottom: none; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} +QTabBar::tab:selected { background: #16181c; } + +/* ===== Dock Widgets ===== */ +QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } +QDockWidget::title { background: #101215; } + +/* ===== Menus & Tooltips ===== */ +QMenuBar, QMenu { + background-color: #0f1115; + color: #33FF00; +} +QMenu::item:selected { background-color: #323232ff; color: #fff; } +QToolTip { + background-color: #1c1f22; + color: #33FF00; + border: 1px solid #3a3f45; + padding: 6px; +} + +/* ===== Scrollbars & Splitters ===== */ +QScrollBar:vertical { + background: #0f1115; + width: 12px; +} +QScrollBar::handle:vertical { + background: #2b2e33; + min-height: 20px; + border-radius: 6px; +} +QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } +QSplitter::handle { background: #151618; } + +/* ===== Status Bar ===== */ +QStatusBar { background: #0f1115; color: #33FF00; } From 1b29b7c981dd17c2695b3eeb54991f2cd7918b9d Mon Sep 17 00:00:00 2001 From: Jason Pruitt Date: Thu, 4 Sep 2025 10:39:39 -0400 Subject: [PATCH 6/8] Add peach theme, and fix a stray blue in the green/black --- blacs/plugins/theme/themes/matrix_theme.qss | 2 +- blacs/plugins/theme/themes/peach_theme.qss | 127 ++++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 blacs/plugins/theme/themes/peach_theme.qss diff --git a/blacs/plugins/theme/themes/matrix_theme.qss b/blacs/plugins/theme/themes/matrix_theme.qss index a8422432..999e8482 100644 --- a/blacs/plugins/theme/themes/matrix_theme.qss +++ b/blacs/plugins/theme/themes/matrix_theme.qss @@ -49,7 +49,7 @@ QTableView, QTreeView, QListView { alternate-background-color: #0f1013; } QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { - background-color: #2b6ea3; + background-color: #33FF33; color: #fff; } diff --git a/blacs/plugins/theme/themes/peach_theme.qss b/blacs/plugins/theme/themes/peach_theme.qss new file mode 100644 index 00000000..6a0d3e30 --- /dev/null +++ b/blacs/plugins/theme/themes/peach_theme.qss @@ -0,0 +1,127 @@ +/* ===== Global & Widget Defaults ===== */ +QWidget { + background-color: #F9ECE6; + color: #FF92A9; + selection-background-color: #FED361; + selection-color: #FFFFFF; + font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; +} + +/* ===== Push Buttons ===== */ +QPushButton { + background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, + stop:0 #FFFFFF, stop:1 #F9ECE6); + border: 1px solid #F9ECE6; + padding: 6px 10px; + border-radius: 6px; + color: #FF92A9; +} +QPushButton:hover { border-color: #FED361; } +QPushButton:pressed { + color: #FFFFFF; + background-color: #FF92A9; +} +QPushButton:checked { + color: #FFFFFF; + background-color: #FED361; +} + +/* ===== LineEdits, TextEdits ===== */ +QLineEdit, QPlainTextEdit, QTextEdit { + background-color: #FFFFFF; + border: 1px solid #F9ECE6; + padding: 6px; + border-radius: 4px; + color: #FF92A9; +} +QLineEdit:focus, QTextEdit:focus { border-color: #FED361; } + +/* ===== Tables, Headers ===== */ +QHeaderView::section { + background-color: #FED361; + color: #FFFFFF; + padding: 6px; + border: 1px solid #F9ECE6; +} +QTableView, QTreeView, QListView { + background-color: #FFFFFF; + gridline-color: #F9ECE6; + alternate-background-color: #F9ECE6; +} +QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { + background-color: #FF92A9; + color: #FFFFFF; +} + +/* ===== Combo & Spin Boxes ===== */ +QComboBox, QSpinBox, QDoubleSpinBox { + background-color: #FFFFFF; + border: 1px solid #F9ECE6; + padding: 4px; + color: #FF92A9; +} + +/* ===== Checkboxes / Radios ===== */ +QCheckBox, QRadioButton { spacing: 6px; } +QCheckBox::indicator, QRadioButton::indicator { + background-color: transparent; + border: 1px solid #FED361; +} + +/* ===== Progress Bar ===== */ +QProgressBar { + border: 1px solid #F9ECE6; + background: #FFFFFF; + text-align: center; + border-radius: 6px; +} +QProgressBar::chunk { + background-color: #FF92A9; + border-radius: 6px; +} + +/* ===== Tabs ===== */ +QTabWidget::pane { border: 1px solid #F9ECE6; } +QTabBar::tab { + background: #FFFFFF; + color: #FF92A9; + padding: 8px; + border: 1px solid #F9ECE6; + border-bottom: none; + border-top-left-radius: 6px; + border-top-right-radius: 6px; +} +QTabBar::tab:selected { background: #FED361; color: #FFFFFF; } + +/* ===== Dock Widgets ===== */ +QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } +QDockWidget::title { background: #FED361; color: #FFFFFF; } + +/* ===== Menus & Tooltips ===== */ +QMenuBar, QMenu { + background-color: #FFFFFF; + color: #FF92A9; +} +QMenu::item:selected { background-color: #FED361; color: #FFFFFF; } +QToolTip { + background-color: #F9ECE6; + color: #FF92A9; + border: 1px solid #FED361; + padding: 6px; +} + +/* ===== Scrollbars & Splitters ===== */ +QScrollBar:vertical { + background: #FFFFFF; + width: 12px; +} +QScrollBar::handle:vertical { + background: #FED361; + min-height: 20px; + border-radius: 6px; +} +QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } +QSplitter::handle { background: #F9ECE6; } + +/* ===== Status Bar ===== */ +QStatusBar { background: #FFFFFF; color: #FF92A9; } From 7276a59d06a70393602f9ea08e96521ee20ab534 Mon Sep 17 00:00:00 2001 From: Jason Pruitt Date: Thu, 4 Sep 2025 10:44:16 -0400 Subject: [PATCH 7/8] Change blue theme to include more blue --- blacs/plugins/theme/themes/blue_theme.qss | 88 +++++++++++------------ 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/blacs/plugins/theme/themes/blue_theme.qss b/blacs/plugins/theme/themes/blue_theme.qss index d8e10da4..6424fe7a 100644 --- a/blacs/plugins/theme/themes/blue_theme.qss +++ b/blacs/plugins/theme/themes/blue_theme.qss @@ -1,8 +1,8 @@ /* ===== Global & Widget Defaults ===== */ QWidget { - background-color: #0a0f1a; - color: #e1e8f0; - selection-background-color: #1e4a72; + background-color: #0a1224; /* deep navy */ + color: #dce7f7; /* light bluish text */ + selection-background-color: #3b82f6; /* vibrant blue */ selection-color: #ffffff; font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; } @@ -10,115 +10,115 @@ QWidget { /* ===== Push Buttons ===== */ QPushButton { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, - stop:0 #1a2332, stop:1 #0f1520); - border: 1px solid #1e2b3d; + stop:0 #1e2d4d, stop:1 #14213a); + border: 1px solid #24324f; padding: 6px 10px; border-radius: 6px; - color: #e1e8f0; + color: #dce7f7; } -QPushButton:hover { border-color: #2563eb; } -QPushButton:pressed { background-color: #e1e8f0; } +QPushButton:hover { border-color: #3b82f6; } +QPushButton:pressed { background-color: #2563eb; color: #fff; } QPushButton:checked { - color: #e1e8f0; - background-color: #0d1117; + color: #dce7f7; + background-color: #2563eb; } /* ===== LineEdits, TextEdits ===== */ QLineEdit, QPlainTextEdit, QTextEdit { - background-color: #070b14; - border: 1px solid #1a2332; + background-color: #0f1a33; + border: 1px solid #24324f; padding: 6px; border-radius: 4px; - color: #e1e8f0; + color: #dce7f7; } -QLineEdit:focus, QTextEdit:focus { border-color: #2563eb; } +QLineEdit:focus, QTextEdit:focus { border-color: #3b82f6; } /* ===== Tables, Headers ===== */ QHeaderView::section { - background-color: #0d1421; - color: #b8c5d6; + background-color: #1a2740; + color: #b8cfee; padding: 6px; - border: 1px solid #1a2332; + border: 1px solid #24324f; } QTableView, QTreeView, QListView { - background-color: #060a12; - gridline-color: #0f1520; - alternate-background-color: #080d17; + background-color: #0d162b; + gridline-color: #1e2d4d; + alternate-background-color: #101b33; } QTableView::item:selected, QTreeView::item:selected, QListView::item:selected { - background-color: #1e4a72; + background-color: #3b82f6; color: #fff; } /* ===== Combo & Spin Boxes ===== */ QComboBox, QSpinBox, QDoubleSpinBox { - background-color: #070b14; - border: 1px solid #1a2332; + background-color: #0f1a33; + border: 1px solid #24324f; padding: 4px; - color: #e1e8f0; + color: #dce7f7; } /* ===== Checkboxes / Radios ===== */ QCheckBox, QRadioButton { spacing: 6px; } QCheckBox::indicator, QRadioButton::indicator { background-color: transparent; - border: 1px solid #2c3e50; + border: 1px solid #3b4e72; } /* ===== Progress Bar ===== */ QProgressBar { - border: 1px solid #1a2332; - background: #070b14; + border: 1px solid #24324f; + background: #0f1a33; text-align: center; border-radius: 6px; } QProgressBar::chunk { - background-color: #2563eb; + background-color: #60a5fa; /* brighter blue chunk */ border-radius: 6px; } /* ===== Tabs ===== */ -QTabWidget::pane { border: 1px solid #1a2332; } +QTabWidget::pane { border: 1px solid #24324f; } QTabBar::tab { - background: #0a0f1a; - color: #b8c5d6; + background: #0a1224; + color: #b8cfee; padding: 8px; - border: 1px solid #1a2332; + border: 1px solid #24324f; border-bottom: none; border-top-left-radius: 6px; border-top-right-radius: 6px; } -QTabBar::tab:selected { background: #0f1520; } +QTabBar::tab:selected { background: #1a2740; color: #fff; } /* ===== Dock Widgets ===== */ QDockWidget { titlebar-close-icon: url(:/icons/close.png); title: " "; } -QDockWidget::title { background: #0a0f1a; } +QDockWidget::title { background: #14213a; color: #dce7f7; } /* ===== Menus & Tooltips ===== */ QMenuBar, QMenu { - background-color: #0a0f1a; - color: #e1e8f0; + background-color: #0a1224; + color: #dce7f7; } -QMenu::item:selected { background-color: #1e4a72; color: #fff; } +QMenu::item:selected { background-color: #2563eb; color: #fff; } QToolTip { - background-color: #0f1520; - color: #e1e8f0; - border: 1px solid #2c3e50; + background-color: #1a2740; + color: #dce7f7; + border: 1px solid #3b4e72; padding: 6px; } /* ===== Scrollbars & Splitters ===== */ QScrollBar:vertical { - background: #0a0f1a; + background: #0a1224; width: 12px; } QScrollBar::handle:vertical { - background: #1a2332; + background: #24324f; min-height: 20px; border-radius: 6px; } QScrollBar::add-line, QScrollBar::sub-line { height: 0px; } -QSplitter::handle { background: #0f1520; } +QSplitter::handle { background: #1a2740; } /* ===== Status Bar ===== */ -QStatusBar { background: #0a0f1a; color: #b8c5d6; } +QStatusBar { background: #0a1224; color: #b8cfee; } From a71a3684c792fd3710b041b5bcc5f0dad8cc0193 Mon Sep 17 00:00:00 2001 From: Jason Pruitt Date: Fri, 5 Sep 2025 15:25:16 -0400 Subject: [PATCH 8/8] Fix formatting nitpick --- blacs/plugins/theme/themes/blue_theme.qss | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/blacs/plugins/theme/themes/blue_theme.qss b/blacs/plugins/theme/themes/blue_theme.qss index 6424fe7a..d2f93e12 100644 --- a/blacs/plugins/theme/themes/blue_theme.qss +++ b/blacs/plugins/theme/themes/blue_theme.qss @@ -1,8 +1,8 @@ /* ===== Global & Widget Defaults ===== */ QWidget { - background-color: #0a1224; /* deep navy */ - color: #dce7f7; /* light bluish text */ - selection-background-color: #3b82f6; /* vibrant blue */ + background-color: #0a1224; + color: #dce7f7; + selection-background-color: #3b82f6; selection-color: #ffffff; font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif; } @@ -17,7 +17,10 @@ QPushButton { color: #dce7f7; } QPushButton:hover { border-color: #3b82f6; } -QPushButton:pressed { background-color: #2563eb; color: #fff; } +QPushButton:pressed { + background-color: #2563eb; + color: #fff; +} QPushButton:checked { color: #dce7f7; background-color: #2563eb;