Last active
March 11, 2021 21:26
-
-
Save serg06/fa230b7c01dd11e7a8072b8129aa0514 to your computer and use it in GitHub Desktop.
PyQt5 / PySide2 QT StyleSheets (qss) dynamic "class" property example
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
from PySide2.QtCore import QObject, QTimer | |
from PySide2.QtWidgets import QApplication, QDialog | |
import sys | |
class Form(QDialog): | |
def __init__(self, parent=None): | |
super(Form, self).__init__(parent) | |
self.setWindowTitle("My Form") | |
self.setStyleSheet(""" | |
.active { | |
background-color: red; | |
} | |
""") | |
self.timer = QTimer() | |
self.timer.timeout.connect(self.onTimer) | |
self.timer.start(1000) | |
def onTimer(self): | |
self.toggleCssClass('active') | |
def hasCssClass(self, className): | |
classNames = self.readCssClasses() | |
return className in classNames | |
def removeCssClass(self, className): | |
classNames = self.readCssClasses() | |
if className in classNames: | |
classNames.remove(className) | |
self.setCssClasses(classNames) | |
def addCssClass(self, className): | |
classNames = self.readCssClasses() | |
classNames.add(className) | |
self.setCssClasses(classNames) | |
def toggleCssClass(self, className): | |
if self.hasCssClass(className): | |
self.removeCssClass(className) | |
else: | |
self.addCssClass(className) | |
def readCssClasses(self) -> set: | |
classStr = self.property('class') | |
if classStr is None: | |
classStr = '' | |
classStr = classStr.strip() | |
classes = [] | |
if len(classStr) > 0: | |
classes = classStr.split(' ') | |
return set(classes) | |
def setCssClasses(self, classNames: set): | |
current = self.readCssClasses() | |
if (current != classNames): | |
self.setProperty('class', ''.join(classNames)) | |
self.style().unpolish(self) | |
self.style().polish(self) | |
if __name__ == '__main__': | |
app = QApplication(sys.argv) | |
form = Form() | |
form.show() | |
sys.exit(app.exec_()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment