Fairly self-contained Python code to make your PyQt5-based GUI plugin match Sigil's light/dark theme. It should be compatible with any version of Sigil that supports PyQt5 plugins. The dark theme just won't appear unless you're using Sigil 1.1.0 or higher.
Code:
def dark_palette(bk, app):
supports_theming = (bk.launcher_version() >= 20200117)
if not supports_theming:
return
if bk.colorMode() != "dark":
return
try:
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QPalette
from PyQt5.QtWidgets import QStyleFactory
except ImportError:
return
p = QPalette()
sigil_colors = bk.color
dark_color = QColor(sigil_colors("Window"))
disabled_color = QColor(127,127,127)
dark_link_color = QColor(108, 180, 238)
text_color = QColor(sigil_colors("Text"))
p.setColor(p.Window, dark_color)
p.setColor(p.WindowText, text_color)
p.setColor(p.Base, QColor(sigil_colors("Base")))
p.setColor(p.AlternateBase, dark_color)
p.setColor(p.ToolTipBase, dark_color)
p.setColor(p.ToolTipText, text_color)
p.setColor(p.Text, text_color)
p.setColor(p.Disabled, p.Text, disabled_color)
p.setColor(p.Button, dark_color)
p.setColor(p.ButtonText, text_color)
p.setColor(p.Disabled, p.ButtonText, disabled_color)
p.setColor(p.BrightText, Qt.red)
p.setColor(p.Link, dark_link_color)
p.setColor(p.Highlight, QColor(sigil_colors("Highlight")))
p.setColor(p.HighlightedText, QColor(sigil_colors("HighlightedText")))
p.setColor(p.Disabled, p.HighlightedText, disabled_color)
app.setStyle(QStyleFactory.create("Fusion"))
app.setPalette(p)
Then after you initialize your QApplication and before you show/exec it:
Code:
app = QApplication(sys.argv)
Add the following function call that takes the BookContainer object and QApplication object as parameters:
Code:
dark_palette(bk, app)
That's about it. Building your PyQt5 Application Widgets is up to you.
I may add some platform-specific tweaks and bug workarounds from time to time. I know for a fact there's some Mac color issues.