def reload_dark_style(self): f = QFile(":/dark_theme.qss") f.open(QFile.ReadOnly | QFile.Text) ts = QTextStream(f) qss = ts.readAll() # f = open(Config.get_resource_path('dark_theme.qss', 'resources/ui'), 'r') # qss = f.read() self.app.setStyleSheet(qss)
def _load_stylesheet(qt_api=''): """ Load the stylesheet based on QtPy abstraction layer environment variable. If the argument is not passed, it uses the current QT_API environment variable to make the imports of Qt bindings. If passed, it sets this variable then make the imports. Args: qt_api (str): qt binding name to set QT_API environment variable. Default is ''. Possible values are pyside, pyside2 pyqt4, pyqt5. Not case sensitive. Note: - Note that the variable QT_API is read when first imported. So, pay attention to the import order. - If you are using another abstraction layer, i.e PyQtGraph to do imports on Qt things you must set both to use the same Qt binding (PyQt, PySide). - OS, binding and binding version number, and application specific patches are applied in this order. Returns: str: stylesheet string (css). """ if qt_api: os.environ['QT_API'] = qt_api # Import is made after setting QT_API from qtpy.QtCore import QCoreApplication, QFile, QTextStream from qtpy.QtGui import QColor, QPalette # Then we import resources - binary qrc content from qdarkstyle import style_rc # Thus, by importing the binary we can access the resources package_dir = os.path.basename(PACKAGE_PATH) qss_rc_path = ":" + os.path.join(package_dir, QSS_FILE) # It gets the qss file from compiled style_rc that was import # not from the file QSS as we are using resources qss_file = QFile(qss_rc_path) if qss_file.exists(): qss_file.open(QFile.ReadOnly | QFile.Text) text_stream = QTextStream(qss_file) stylesheet = text_stream.readAll() else: stylesheet = "" # Todo: check this raise type and add to docs raise FileNotFoundError("Unable to find QSS file '{}' " "in resources.".format(qss_rc_path)) # 4. Apply palette fix. See issue #139 _apply_application_patches(QCoreApplication, QPalette, QColor) return stylesheet
def reload_light_style(self): if CONFIG['light_theme_is_native']: self.set_style_to_stock() return f = QFile(":/light_theme.qss") f.open(QFile.ReadOnly | QFile.Text) ts = QTextStream(f) qss = ts.readAll() # f = open(Config.get_resource_path('light_theme.qss', 'resources/ui'), 'r') # qss = f.read() self.app.setStyleSheet(qss)
def updateFrameSheet(self): if globals.applied_style == 'light': f = QFile(':/frameless-light.qss') elif globals.applied_style == 'dark': f = QFile(':/frameless-dark.qss') else: raise RuntimeError( 'Set the app style theme before instantiating ModernWindow') f.open(QIODevice.ReadOnly | QIODevice.Text) text = QTextStream(f) text.setCodec('UTF-8') text = text.readAll() self.setStyleSheet(text) f.close()
def _apply_base_theme(app): """ Apply base theme to the application. Args: app (QApplication): QApplication instance. """ if QT_VERSION < (5,): app.setStyle('plastique') else: app.setStyle('Fusion') f = QFile(':/style.qss') f.open(QIODevice.ReadOnly | QIODevice.Text) text = QTextStream(f) text.setCodec('UTF-8') app.setStyleSheet(text.readAll()) f.close()
def _load_stylesheet(qt_api='', palette=None): """ Load the stylesheet based on QtPy abstraction layer environment variable. If the argument is not passed, it uses the current QT_API environment variable to make the imports of Qt bindings. If passed, it sets this variable then make the imports. Args: qt_api (str): qt binding name to set QT_API environment variable. Default is ''. Possible values are pyside, pyside2 pyqt4, pyqt5. Not case sensitive. palette (Palette): Palette class that inherits from Palette. Note: - Note that the variable QT_API is read when first imported. So, pay attention to the import order. - If you are using another abstraction layer, i.e PyQtGraph to do imports on Qt things you must set both to use the same Qt binding (PyQt, PySide). - OS, binding and binding version number, and application specific patches are applied in this order. Returns: str: stylesheet string (css). """ if qt_api: os.environ['QT_API'] = qt_api # Import is made after setting QT_API from qtpy.QtCore import QCoreApplication, QFile, QTextStream from qtpy.QtGui import QColor, QPalette from qtpy import QT_VERSION # Then we import resources - binary qrc content if palette is None: from qdarkstyle.dark import style_rc palette = DarkPalette _set_global_paths('dark') elif palette.ID == 'dark': from qdarkstyle.dark import style_rc palette = DarkPalette _set_global_paths('dark') elif palette.ID == 'light': from qdarkstyle.light import style_rc palette = LightPalette _set_global_paths('light') else: print("Not recognized ID for palette! Exiting!") sys.exit(1) # Thus, by importing the binary we can access the resources package_dir = os.path.basename(PACKAGE_PATH) qss_rc_path = ":" + os.path.join(package_dir, palette.ID, QSS_FILE) _logger.debug("Reading QSS file in: %s" % qss_rc_path) # It gets the qss file from compiled style_rc that was imported, # not from the file QSS as we are using resources qss_file = QFile(qss_rc_path) if qss_file.exists(): qss_file.open(QFile.ReadOnly | QFile.Text) text_stream = QTextStream(qss_file) stylesheet = text_stream.readAll() _logger.info("QSS file sucessfuly loaded.") else: stylesheet = "" # Todo: check this raise type and add to docs raise FileNotFoundError("Unable to find QSS file '{}' " "in resources.".format(qss_rc_path)) _logger.debug("Checking patches for being applied.") # Todo: check execution order for these functions # 1. Apply OS specific patches stylesheet += _apply_os_patches(palette) # 2. Apply binding specific patches stylesheet += _apply_binding_patches() # 3. Apply binding version specific patches stylesheet += _apply_version_patches(QT_VERSION) # 4. Apply palette fix. See issue #139 _apply_application_patches(QCoreApplication, QPalette, QColor, palette) return stylesheet
def _load_stylesheet(qt_api='', style=''): """ Load the stylesheet based on QtPy abstraction layer environment variable. If the argument is not passed, it uses the current QT_API environment variable to make the imports of Qt bindings. If passed, it sets this variable then make the imports. Args: qt_api (str): qt binding name to set QT_API environment variable. Default is ''. Possible values are pyside2, pyqt5. Not case sensitive. Note: - Note that the variable QT_API is read when first imported. So, pay attention to the import order. - OS, binding and binding version number, and application specific patches are applied in this order. Returns: str: stylesheet string (css). """ if qt_api: os.environ['QT_API'] = qt_api # Import is made after setting QT_API from qtpy.QtCore import QCoreApplication, QFile, QTextStream from qtpy.QtGui import QColor, QPalette from qtpy import QT_VERSION # Search for style in styles directory style_dir = None available_styles = getAvailableStyles() _logger.debug(f"Available styles: {available_styles}") for stl in available_styles: if style.lower() == stl.lower(): style_dir = stl break if style_dir is None: stylesheet = "" raise FileNotFoundError("Style " + style + " does not exists") # check if any style_rc was loaded before if "style_rc" in sys.modules: _logger.info("Found already imported style in sys.modules") # use qCleanupResources to remove all resource files global style_rc # noqa style_rc.qCleanupResources() # remove imported modules for x in [ module for module in sys.modules if module.startswith("style_rc") ]: del sys.modules[x] del style_rc # remove path to previously imported style from sys.path for stylepath in [ path for path in sys.path if any( style for style in getAvailableStyles() if style in path) ]: sys.path.remove(stylepath) _logger.debug("Removed all imported styles") try: _logger.debug("Loading style from directory: " + style_dir) old_working_dir = os.getcwd() # set style directory package_dir = os.path.join(STYLES_PATH, style_dir) os.chdir(package_dir) # append directory to sys.path and import style_rc sys.path.append(package_dir) try: import style_rc # noqa # get palette palette = style_rc.palette except ModuleNotFoundError: raise ModuleNotFoundError( "Failed to import style_rc from directory: {}".format( package_dir)) finally: os.chdir(old_working_dir) except FileExistsError: raise FileNotFoundError("Missing style_rc.py file") _logger.info("Style resources imported successfully") # Thus, by importing the binary we can access the resources package_dir = os.path.basename(PACKAGE_PATH) qss_rc_path = ":" + os.path.join(package_dir, QSS_FILE) _logger.debug("Reading QSS file in: %s", qss_rc_path) # It gets the qss file from compiled style_rc that was import # not from the file QSS as we are using resources qss_file = QFile(qss_rc_path) if qss_file.exists(): qss_file.open(QFile.ReadOnly | QFile.Text) text_stream = QTextStream(qss_file) stylesheet = text_stream.readAll() _logger.info("QSS file sucessfuly loaded.") else: stylesheet = "" # Todo: check this raise type and add to docs raise FileNotFoundError("Unable to find QSS file '{}' " "in resources.".format(qss_rc_path)) _logger.debug("Checking patches for being applied.") # Todo: check execution order for these functions # 1. Apply OS specific patches stylesheet += _apply_os_patches(palette) # 2. Apply binding specific patches stylesheet += _apply_binding_patches() # 3. Apply binding version specific patches stylesheet += _apply_version_patches(QT_VERSION) # 4. Apply palette fix. See issue #139 _apply_application_patches(palette, QCoreApplication, QPalette, QColor) return stylesheet