Skip to content

Instantly share code, notes, and snippets.

@serg06
Last active March 11, 2021 21:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save serg06/fa230b7c01dd11e7a8072b8129aa0514 to your computer and use it in GitHub Desktop.
Save serg06/fa230b7c01dd11e7a8072b8129aa0514 to your computer and use it in GitHub Desktop.
PyQt5 / PySide2 QT StyleSheets (qss) dynamic "class" property example
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