-
-
Save lschmierer/443b8e21ad93e2a2d7eb to your computer and use it in GitHub Desktop.
Qt5 Dark Fusion Palette for Python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
qApp.setStyle("Fusion") | |
dark_palette = QPalette() | |
dark_palette.setColor(QPalette.Window, QColor(53, 53, 53)) | |
dark_palette.setColor(QPalette.WindowText, Qt.white) | |
dark_palette.setColor(QPalette.Base, QColor(25, 25, 25)) | |
dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53)) | |
dark_palette.setColor(QPalette.ToolTipBase, Qt.white) | |
dark_palette.setColor(QPalette.ToolTipText, Qt.white) | |
dark_palette.setColor(QPalette.Text, Qt.white) | |
dark_palette.setColor(QPalette.Button, QColor(53, 53, 53)) | |
dark_palette.setColor(QPalette.ButtonText, Qt.white) | |
dark_palette.setColor(QPalette.BrightText, Qt.red) | |
dark_palette.setColor(QPalette.Link, QColor(42, 130, 218)) | |
dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218)) | |
dark_palette.setColor(QPalette.HighlightedText, Qt.black) | |
qApp.setPalette(dark_palette) | |
qApp.setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }") |
Put it wherever you have access to you QApplication(). Replace 'qApp' with your object's name and change out all the Qt.colorName calls with a QColor, for example Qt.white becomes QColor(255, 255, 255)
Maybe this would help some people.
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from PyQt5.QtGui import QPalette, QColor
WHITE = QColor(255, 255, 255)
BLACK = QColor(0, 0, 0)
RED = QColor(255, 0, 0)
PRIMARY = QColor(53, 53, 53)
SECONDARY = QColor(35, 35, 35)
TERTIARY = QColor(42, 130, 218)
def css_rgb(color, a=False):
"""Get a CSS `rgb` or `rgba` string from a `QtGui.QColor`."""
return ("rgba({}, {}, {}, {})" if a else "rgb({}, {}, {})").format(*color.getRgb())
class QDarkPalette(QPalette):
"""Dark palette for a Qt application meant to be used with the Fusion theme."""
def __init__(self, *__args):
super().__init__(*__args)
# Set all the colors based on the constants in globals
self.setColor(QPalette.Window, PRIMARY)
self.setColor(QPalette.WindowText, WHITE)
self.setColor(QPalette.Base, SECONDARY)
self.setColor(QPalette.AlternateBase, PRIMARY)
self.setColor(QPalette.ToolTipBase, WHITE)
self.setColor(QPalette.ToolTipText, WHITE)
self.setColor(QPalette.Text, WHITE)
self.setColor(QPalette.Button, PRIMARY)
self.setColor(QPalette.ButtonText, WHITE)
self.setColor(QPalette.BrightText, RED)
self.setColor(QPalette.Link, TERTIARY)
self.setColor(QPalette.Highlight, TERTIARY)
self.setColor(QPalette.HighlightedText, BLACK)
@staticmethod
def set_stylesheet(app):
"""Static method to set the tooltip stylesheet to a `QtWidgets.QApplication`."""
app.setStyleSheet("QToolTip {{"
"color: {white};"
"background-color: {tertiary};"
"border: 1px solid {white};"
"}}".format(white=css_rgb(WHITE), tertiary=css_rgb(TERTIARY)))
def set_app(self, app):
"""Set the Fusion theme and this palette to a `QtWidgets.QApplication`."""
app.setStyle("Fusion")
app.setPalette(self)
self.set_stylesheet(app)
Maybe also add for disabled tabs (untested):
palette.setColor(QPalette.Disabled, QPalette.WindowText, Qt.darkGray)
To complete disabled menu (tested):
dark_palette.setColor(QPalette.Disabled, QPalette.Text, QtCore.Qt.darkGray)
dark_palette.setColor(QPalette.Disabled, QPalette.ButtonText, QtCore.Qt.darkGray)
Thanks @hdrpano @0x6a61 for those tips
This is the winning complete combination for my use nice context menus
dark_palette = QPalette()
dark_palette.setColor(QPalette.Window, QColor(53, 53, 53))
dark_palette.setColor(QPalette.WindowText, Qt.white)
dark_palette.setColor(QPalette.Base, QColor(35, 35, 35))
dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
dark_palette.setColor(QPalette.ToolTipBase, QColor(25, 25, 25))
dark_palette.setColor(QPalette.ToolTipText, Qt.white)
dark_palette.setColor(QPalette.Text, Qt.white)
dark_palette.setColor(QPalette.Button, QColor(53, 53, 53))
dark_palette.setColor(QPalette.ButtonText, Qt.white)
dark_palette.setColor(QPalette.BrightText, Qt.red)
dark_palette.setColor(QPalette.Link, QColor(42, 130, 218))
dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
dark_palette.setColor(QPalette.HighlightedText, QColor(35, 35, 35))
dark_palette.setColor(QPalette.Active, QPalette.Button, QColor(53, 53, 53))
dark_palette.setColor(QPalette.Disabled, QPalette.ButtonText, Qt.darkGray)
dark_palette.setColor(QPalette.Disabled, QPalette.WindowText, Qt.darkGray)
dark_palette.setColor(QPalette.Disabled, QPalette.Text, Qt.darkGray)
dark_palette.setColor(QPalette.Disabled, QPalette.Light, QColor(53, 53, 53))
PyQt6:
palette = QPalette()
palette.setColor(QPalette.ColorRole.Window, QColor(53,53,53))
palette.setColor(QPalette.ColorRole.WindowText, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.Base, QColor(42,42,42))
palette.setColor(QPalette.ColorRole.ToolTipBase, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.ToolTipText, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.Dark, QColor(35,35,35))
palette.setColor(QPalette.ColorRole.Shadow, QColor(20,20,20))
palette.setColor(QPalette.ColorRole.AlternateBase, QColor(53, 53, 53))
palette.setColor(QPalette.ColorRole.ToolTipBase, Qt.GlobalColor.black)
palette.setColor(QPalette.ColorRole.ToolTipText, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.Text, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.Button, QColor(53, 53, 53))
palette.setColor(QPalette.ColorRole.ButtonText, Qt.GlobalColor.white)
palette.setColor(QPalette.ColorRole.BrightText, Qt.GlobalColor.red)
palette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
palette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
palette.setColor(QPalette.ColorRole.HighlightedText, QColor(127,127,127))
app.setPalette(palette)
app.setStyle("Fusion")
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for porting it to Python! This might be a silly question, but how do I implement/use it in my pyqt application? Should I just import this file where i create my QMainWindow?