tMerge pull request #4461 from SomberNight/dark_theme - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 0546fa73dfc012a925a27b0134132fa7b07e05b8 DIR parent 9a8183f348f5b4b56efe8f27b24c7baf7c46e207 HTML Author: ThomasV <thomasv@electrum.org> Date: Mon, 25 Jun 2018 17:10:46 +0200 Merge pull request #4461 from SomberNight/dark_theme option to set a dark theme for Qt Diffstat: M contrib/requirements/requirements.… | 1 + M gui/qt/__init__.py | 16 +++++++++++++++- M gui/qt/main_window.py | 12 ++++++++++++ M gui/qt/util.py | 4 ++-- 4 files changed, 30 insertions(+), 3 deletions(-) --- DIR diff --git a/contrib/requirements/requirements.txt b/contrib/requirements/requirements.txt t@@ -7,3 +7,4 @@ protobuf dnspython jsonrpclib-pelix PySocks>=1.6.6 +qdarkstyle<3.0 DIR diff --git a/gui/qt/__init__.py b/gui/qt/__init__.py t@@ -117,8 +117,22 @@ class ElectrumGui: self.build_tray_menu() self.tray.show() self.app.new_window_signal.connect(self.start_new_window) + self.set_dark_theme_if_needed() run_hook('init_qt', self) - ColorScheme.update_from_widget(QWidget()) + + def set_dark_theme_if_needed(self): + use_dark_theme = self.config.get('qt_gui_color_theme', 'default') == 'dark' + if use_dark_theme: + try: + import qdarkstyle + self.app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) + except BaseException as e: + use_dark_theme = False + print_error('Error setting dark theme: {}'.format(e)) + # Even if we ourselves don't set the dark theme, + # the OS/window manager/etc might set *a dark theme*. + # Hence, try to choose colors accordingly: + ColorScheme.update_from_widget(QWidget(), force_dark=use_dark_theme) def build_tray_menu(self): # Avoid immediate GC of old menu when window closed via its action DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py t@@ -2790,6 +2790,18 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): qr_combo.currentIndexChanged.connect(on_video_device) gui_widgets.append((qr_label, qr_combo)) + colortheme_combo = QComboBox() + colortheme_combo.addItem(_('Light'), 'default') + colortheme_combo.addItem(_('Dark'), 'dark') + index = colortheme_combo.findData(self.config.get('qt_gui_color_theme', 'default')) + colortheme_combo.setCurrentIndex(index) + colortheme_label = QLabel(_('Color theme') + ':') + def on_colortheme(x): + self.config.set_key('qt_gui_color_theme', colortheme_combo.itemData(x), True) + self.need_restart = True + colortheme_combo.currentIndexChanged.connect(on_colortheme) + gui_widgets.append((colortheme_label, colortheme_combo)) + usechange_cb = QCheckBox(_('Use change addresses')) usechange_cb.setChecked(self.wallet.use_change) if not self.config.is_modifiable('use_change'): usechange_cb.setEnabled(False) DIR diff --git a/gui/qt/util.py b/gui/qt/util.py t@@ -706,8 +706,8 @@ class ColorScheme: return brightness < (255*3/2) @staticmethod - def update_from_widget(widget): - if ColorScheme.has_dark_background(widget): + def update_from_widget(widget, force_dark=False): + if force_dark or ColorScheme.has_dark_background(widget): ColorScheme.dark_scheme = True