def build_stylesheet(theme='', invert_secondary=False, resources=[], extra={}): """""" theme = get_theme(theme, invert_secondary) if theme is None: return None set_icons_theme(theme) loader = jinja2.FileSystemLoader( os.path.join(os.path.dirname(os.path.abspath(__file__)))) env = jinja2.Environment(autoescape=True, loader=loader) theme['icon'] = None env.filters['opacity'] = opacity # env.filters['load'] = load stylesheet = env.get_template(template) theme.setdefault('font_family', 'Roboto') theme.setdefault('danger', '#dc3545') theme.setdefault('warning', '#ffc107') theme.setdefault('success', '#17a2b8') theme.update(extra) default_palette = QGuiApplication.palette() default_palette.setColor( QPalette.PlaceholderText, QColor( *[int(theme['primaryColor'][i:i + 2], 16) for i in range(1, 6, 2)] + [92])) QGuiApplication.setPalette(default_palette) return stylesheet.render(**theme)
def build_stylesheet(theme='', invert_secondary=False, extra={}, parent='theme', template=TEMPLATE_FILE): """""" try: add_fonts() except Exception as e: logging.warning(e) theme = get_theme(theme, invert_secondary) if theme is None: return None set_icons_theme(theme, parent=parent) # Render custom template if os.path.exists(template): parent, template = os.path.split(template) loader = jinja2.FileSystemLoader(parent) env = jinja2.Environment(autoescape=False, loader=loader) env.filters['opacity'] = opacity env.filters['density'] = density stylesheet = env.get_template(template) else: env = jinja2.Environment(autoescape=False, loader=jinja2.BaseLoader) env.filters['opacity'] = opacity env.filters['density'] = density stylesheet.from_string(template) theme.setdefault('icon', None) theme.setdefault('font_family', 'Roboto') theme.setdefault('danger', '#dc3545') theme.setdefault('warning', '#ffc107') theme.setdefault('success', '#17a2b8') theme.setdefault('density_scale', '0') theme.setdefault('button_shape', 'default') theme.update(extra) if GUI: default_palette = QGuiApplication.palette() color = QColor(*[int(theme['primaryColor'][i:i + 2], 16) for i in range(1, 6, 2)] + [92]) try: if hasattr(QPalette, 'PlaceholderText'): # pyqt5, pyside2, pyside6 default_palette.setColor(QPalette.PlaceholderText, color) else: # pyqt6 default_palette.setColor(QPalette.ColorRole.Text, color) QGuiApplication.setPalette(default_palette) except: # pyside6 & snake_case, true_property default_palette.set_color(QPalette.ColorRole.Text, color) QGuiApplication.set_palette(default_palette) environ = { 'linux': platform.system() == 'Linux', 'windows': platform.system() == 'Windows', 'darwin': platform.system() == 'Darwin', 'pyqt5': 'PyQt5' in sys.modules, 'pyqt6': 'PyQt6' in sys.modules, 'pyside2': 'PySide2' in sys.modules, 'pyside6': 'PySide6' in sys.modules, } environ.update(theme) return stylesheet.render(environ)